- ベストアンサー
VBAの「This Workbook」について
VBAの「This Workbook」にコードを書くことについて教えて下さい。 ここにコードを書きと、例えばどんな便利な機能があるのでしょうか? よろしくお願いします。 私は下記の意味はだいだいわかります。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Private Sub Workbook_Open()
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VBEのVBAProjectにSheet1などシートモジュールがあります。そのWorkBook版だと思えばよいと思います。 (1)Workbookのイベントのプロシージュアー (2)各個々のSheetに関連して、その上(どのシートにおいてもそのイベントが起これば)のレベルでシートのイベントを捉える (3)Window画面関連 (4)その他 などをここに書く。 (1)はOpen、Close、Activate、それらのBefoe版 (2)はSheettXXXの形のもの、Newsheet (3)はWindowActivateなど (4)その他PivotTableやAddinとの絡み ーー >便利な機能があるのでしょうか 便利というか、ユーザーが利用したいとき、あれば使えて貴重、無ければどうするかというものだと思います。 これ以外のほしいものは無いのか、とは思います。 (1)以外は、高等な使い方をする方向きの選択肢という気がします。
その他の回答 (1)
- temtecomai2
- ベストアンサー率61% (656/1071)
例えば各シートには Activate イベントがあります。 TshisWorkbook にも SheetActivate イベントがあります。 これらの違いをよ~く見てください。 Sheet1 の Activate イベントは Private Sub Worksheet_Activate() となっており、 ThisWorkbook の方は Private Sub Workbook_SheetActivate(ByVal Sh As Object) となっています。違いが分かりましたか? ThisWorkbook の Activate イベントには引数がありますね。 この引数は何だと予想しますか? アクティブになったシートを表す Worksheet オブジェクトです。 シートがアクティブになったときに何らかの処理をしたい場合、それが Sheet1 の場合だけなら Sheet1 の Activate イベントに記述すれば済みますが、いくつかのシートである程度共通した処理をしたい場合は ThisWorkbook の SheetActivate イベントを利用します。 下記コードはアクティブになったシートのセル A1 に、現在の日時を書き込み、さらにはシートの名前によって処理を分けています。(具体的な処理は書いてませんが) Private Sub Workbook_SheetActivate(ByVal Sh As Object) Sh.Cells(1, 1).Value = Now() Select Case Sh.Name Case "Sheet1" ' 処理1 Case "Sheet2" ' 処理2 Case "Sheet3" ' 処理3 End Select End Sub
お礼
ご回答ありがとうございます。 たいへん、勉強になりました。
お礼
ご回答ありがとうございます。 よくわかりました。