「Sheets」(「Sheet1」、「Sheet2」など)、「ThisWorkbook」、および「Modules」(「Module1」など)でVBAコードを実行すると、どのような違いがありますか?
言い換えれば、どの場合にどちらを使用する必要がありますか?
「Sheets」(「Sheet1」、「Sheet2」など)、「ThisWorkbook」、および「Modules」(「Module1」など)でVBAコードを実行すると、どのような違いがありますか?
言い換えれば、どの場合にどちらを使用する必要がありますか?
モジュールは、類似した関数とサブルーチンの集まりであり、通常は機能の観点からグループ化されています。
モジュールのサブルーチン/関数では、 Private : 関数とサブルーチンはそのモジュール内でのみ使用できます。 Public : どこからでも直接アクセスできます。(別のモジュール、別のマクロなど) ユーティリティ関数をモジュールに格納するのは一般的な方法です。
Option Private Module
モジュール自体を非公開にする は、標準モジュールの先頭に追加できますが、ThisWorkbook や Sheet1 などのオブジェクト モジュールでは許可されません。
ThisWorkbook は Workbook オブジェクトのプライベート モジュールです。たとえば、Workbook_Open()、Workbook_Close()ルーチンは、このモジュール内にあります。(ワークブック オブジェクト参照)
同様に、Sheet1、Sheet2 は個々のシートのプライベート モジュールです。その中に、そのシートに固有の機能を入れます。 Worksheet_Activate、Worksheet_Deactivate、Workbook_SheetChangeは、それぞれのプライベートシートモジュール内で処理できるように提供されるデフォルトのイベントです。(ワークシート オブジェクト参照)
@Daniel Cook がコメントで述べたように、ThisWorkbook と WorkSheet のモジュールはモジュールとして、subName()
またはモジュールの外部で直接使用することはできませんが、またはfunctionName()
を使用してそれらを呼び出すことは引き続き可能です。ThisWorkbook.subName()
ThisWorkbook.functionName()
クラス モジュールは、VBA の OOP に最も近いものです。それらにはコンストラクターとデストラクタがあり、インスタンス化してクラス オブジェクトを提供できます。
Modules
実行する必要がありThisWorkBook
、イベントなどのイベントに使用されることを少なくとも知っていSheetChange
ます。
一般的なコードは次のように吐き出されThisWorkBook
ます:
Private Sub Workbook_Open()
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
End Sub
この質問はすでにここでも回答されています:
http://www.pcreview.co.uk/forums/macro-module-function-sub-and-workbook-and-sheets-t980275.html