• ベストアンサー

VBAの「This Workbook」について

VBAの「This Workbook」にコードを書くことについて教えて下さい。 ここにコードを書きと、例えばどんな便利な機能があるのでしょうか? よろしくお願いします。 私は下記の意味はだいだいわかります。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Private Sub Workbook_Open()

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.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)以外は、高等な使い方をする方向きの選択肢という気がします。

taka1012
質問者

お礼

ご回答ありがとうございます。 よくわかりました。

その他の回答 (1)

回答No.1

例えば各シートには 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

taka1012
質問者

お礼

ご回答ありがとうございます。 たいへん、勉強になりました。