Archive for the ‘Excel’ Category

ExcelのPatch

こんなのがいきなり出てましたけど。

Microsoft Security Bulletin MS07-036 – Critical
Vulnerabilities in Microsoft Excel Could Allow Remote Code Execution (936542)

This critical update resolves one publicly disclosed vulnerability and two privately reported vulnerabilities in addition to other security issues identified during the course of the investigation. These vulnerabilities could allow remote code execution if a user opens a specially crafted Excel file. Users whose accounts are configured to have fewer user rights on the system could be less impacted than users who operate with administrative user rights.

This is a critical security update for supported editions of Microsoft Office 2000. For supported editions of Microsoft Office XP, Microsoft Office 2003, 2007 Microsoft Office System, this update is rated important. This update is also rated important for the Excel Viewer 2003, Office Compatibility Pack for Word, Excel, and PowerPoint 2007 File Formats. For more information, see the subsection, Affected and Non-Affected Software, in this section.

「critical」という言葉が何度も使われており、かなり緊急性の高い性質のようですけど。「Microsoft recommends that customers apply the update immediately.」(ユーザーの皆様におかれましては、今すぐアップデートされることをお勧めします。)って…。既に公になっている問題点1つと、調査によって私的に報告された問題点2つを解決した、となっていますが、何故、公になっている方はさっさと始末しておかなかったんですかね。月に一回しか更新しないからですか?

ユーザーが特別に作成されたファイルを開いたとき、遠隔操作を可能にする脆弱性と説明されていますが、「特別に作成されたファイル」って何のことですかね。素人が適当に訳したので、技術的には間違っているかもしれませんが。対象となるアプリケーションは上にも列挙されていますが、引用したページに一覧表があるので、そちらのほうが分りやすいです。

MOUGのスキルアップ講座に「クラスモジュールを使った究極のVBAプログラミング」と題されたコラムの5ページ目にコントロール配列に関する記述があり、フォーム上に配置した5つのコマンドボタンをクリックしたときに走らせるコードをひとつで済ませる方法が説明されています。通常は各ボタンに共通した動きをさせるプロシージャを用意してサブルーチン化し、それぞれのイベントプロシージャから走らせる、という面倒なことをしなければならないわけですから、ここで紹介されているやり方はCoolです。

これと同じようなことをテキストボックスにおいてもやってみたいと考えて試してみたのですが、何故かイベントプロシージャには存在するAfterUpdateイベントがクラスモジュールにはない様なのです。VBEのオブジェクトブラウザから見ても、MSForms.TextboxのメンバにAfterUpdateはありません。イベントとしてChangeとかDblClickとかはあるのですが、テキストボックスという性質上、やはりユーザーが入力を完了した時点で動作をさせたいわけで、Changeだと一文字打ち込むごとに動いてしまうのでよろしくありません。

何をさせたいのかというと、現行バージョンでも行っている3桁ごとにカンマを入れることに加え、次回からは入力が終了した時点でBlinkしたりフォント色を変えたりさせれば無愛想なフォームに多少は彩が出るのかな、と(余計と思われる方もいるかもしれませんが…)。

検索してみるとメンバにAfterUpdateがあるのはMSForms.Controlだけのようですねぇ。クラスモジュールにMSForms.Controlとして用意した変数に無理やりテキストボックスを入れてAfterUpdateイベントのメソッドを書いてみましたが見事はねられました。
何故フォームに存在するイベントがクラスモジュールでは使えないのか不思議です。