図6:Visual Basic Editorを開く時の画面 |
![]() |
ただし通常の設定では、はじめは[マクロ]は隠しメニューになっているので、オプションを「すべて表示」に変更してもよいでしょう。
それでは、まずメモフォルダが“開けない”ように細工してみたいと思います。これを実現するには、まず、メモフォルダを開こうとした時に発生するイベントを受け取ればよさそうです。イベントは特定のオブジェクトと関連づけられています。よって、イベントを受け取るためには、まずオブジェクトを宣言しなければなりません。ここでの例外はApplicationオブジェクトです。これは最上位のオブジェクトであり、常に使用できますが、Applicationオブジェクトでは、Applicationオブジェクトのイベントしか受け取れないので、フォルダを開くイベントを受け取るには、受け取るためのオブジェクトを用意する必要があります。
この場合必要なオブジェクトは、OutlookBarPaneオブジェクトです。このオブジェクト変数を定義するには、コードモジュールにWithEventキーワードを用いて次のように指定します。
Dim WithEvents myBar As Outlook.OutlookBarPane
この定義を行なえば、モジュールウィンドウの左側のリストボックスにmyBarが追加されます(図7)。myBarを選択すると自動的に右側のリストボックスから、BeforeNavigateイベントが選択され、コードモジュールにmyBar_BeforeNavigateというSubファンクションが開かれます(図8)。BeforeNavigateは、別のフォルダに移動するために、ユーザーがOutlookバーのショートカットをクリックすると発生するイベントです。つまり、ショートカットのクリックイベントが発生するたびに「メモ」かどうかを調べて、もし「メモ」ならば、処理をキャンセルすればよいということになります。
図7:モジュールウィンドウにmyBarが追加されている |
![]() |
図8:myBar_BeforeNavigateというSubファンクションが開かれる |
![]() |
単に処理をキャンセルするだけでは、動作したかどうかがわかりづらいので、“メモフォルダを開くことはできません。”というメッセージボックスを表示することにしました(リスト1)。
リスト1:メモフォルダを開けないようにするマクロ |
|
ここでひとつ注意があります。WithEventsで定義したオブジェクト変数は、あくまで “変数”です。どこかで実体をセットしてあげる必要があります。それを行なっているのが、Outlook起動時の処理、Application_Startupなのです。このイベントは、Outlook起動時に発生するイベントでApplicationオブジェクトに付随しているので、宣言する必要はありません。
では、コードを入力したら[ファイル]メニューから[上書き保存]を選択し、プロジェクトを保存しておきましょう。保存したら、一度Outlook 2000も終了させて動作を確認してみましょう。理由はおわかりですね? 起動時のイベントは起動時にしか発生しないからです。
では、新たにOutlook 2000を起動してみましょう。何やらアヤしいメッセージが出てきました。これは、Excelにもあるマクロウィルス対策用のダイアログです(図9)。先ほど作成したVBAプログラムが反応しているので、当然ここでは、「マクロを有効にする」を選択します。そして、無事立ち上がったならば、さっそく1番左のOutlookショートカットから、「メモ」を選択してみてください。「メモフォルダを開くことはできません。」というダイアログが表示され、メモに移動ができなくなっているのがわかるでしょう。
図9:マクロウィルス対策用のダイアログ |
![]() |