記事キャッチ画像  (22)  オブジェクトモジュールには「各ワークシート毎」のモジュールだけでなく、「ブック毎」のモジュールもある! 

 1. 各ワークシート毎だけでなく、Excelブック毎でもイベントをトラップ可能 

 2. VBAのイベントは「手動操作」だけでなく、「VBA(コード)操作」でも発生することを覚えておいて欲しい 

  「広告」  
 

 (22)  オブジェクトモジュールには「各ワークシート毎」のモジュールだけでなく、「ブック毎」のモジュールもある! 

Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。 

Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。

現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)

( ユーザー定義関数 のVBAコードを含んだ)前回使用した XLSM ファイルを、「マクロを有効」にして開きます。

58

[ alt ] + [ F11 ] にて VBE を開き、SheetN ではなく(上記画面赤枠の) ThisWorkbook を選択後、以下の VBAコードを入力するかコピーして貼り付け。
SheetN の N の部分は、「1」でない場合もあり )


Rem
Rem    ThisWorkBook
Rem

Option Explicit

'--------------------------------
'    Event: Workbook_Open()
'--------------------------------
Private Sub Workbook_Open()

    Dim hh As Integer
    hh = Hour(Now())

    If hh < 7 Then
        MsgBox "Sleeping!"
    Else
        MsgBox Now()
    End If

End Sub

コード自体に意味は無いが、 ThisWorkbook (Excelブック)のイベントプロシージャ であることが重要で、 Excelブックが開かれた直後に実行される。
VB の Now() 関数は、以下画面のように「現在の日付と時刻を」返す。
Hour() 関数は、Date型 を引数とし、時刻を表す 0 〜 23 の整数型 (Integer) を返す。
Date型 には、日付だけでなく時刻も含まれている。

 1. 各ワークシート毎だけでなく、Excelブック毎でもイベントをトラップ可能 

34

ThisWorkbook のイベントプロシージャには、「Excelブックを開いた直後」や、「ブックを閉じる前」「ブックを保存する前」「ブックが保存された後」等がある。
面白いのは「ワークシートをダブルクリックした時」もイベントが発生し、それをトラップ(捕捉)するのが Excelブック オブジェクトだということだ。
前回テストした「セルのダブルクリック時」とのイベント発生順も含めて、後日確認する。

前回「SheetN」と書いたのは、同一ブック内にワークシートを追加するとWorksheet モジュールも追加されるからだ。
ブックオブジェクトは(自ブック内の)全ワークシートを管理しているので、全ワークシートをまとめて処理したい場合に便利。

本日覚えて頂きたいことは、イベントプロシージャは「ワークシート」対象の物と、「ブック」対象の物があり、記述するモジュールも異なるということ


 2. VBAのイベントは「手動操作」だけでなく、「VBA(コード)操作」でも発生することを覚えておいて欲しい 

前回説明を忘れて、申し訳ない。
VBA(コード)操作でも、実はイベントが発生する。
VBA実行時にイベントが次々と発生することもあり、考慮してコードを記述しないと失敗する。

イベントプロシージャは「プロシージャ名、引数の型や順番」が決まっているので、イベントプロシージャの Sub 〜 End Sub に1行も記述していない状態で存在すると捉えても良い。

つまり、通常の Excel操作 でもイベントはたくさん発生しているが、それをトラップ(捕捉)していないだけだ。

必要なイベントプロシージャのみ実装するプログラミングを、イベント駆動型(イベント・ドリブン)と言う。

VBA の 大本である VB (Visual Basic) は、イベント駆動型プログラミングで一世を風靡したプログラム言語だ。


次回は、「VBAコード操作でもイベントが発生」する事を理解します!
良いサンプルコードが浮かばなかったので、明日まで時間を頂きたい(笑)


お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)


最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル

  「広告」