9

「Sheets」(「Sheet1」、「Sheet2」など)、「ThisWorkbook」、および「Modules」(「Module1」など)でVBAコードを実行すると、どのような違いがありますか?

言い換えれば、どの場合にどちらを使用する必要がありますか?

ここに画像の説明を入力してください

4

2 に答える 2

12

モジュールは、類似した関数とサブルーチンの集まりであり、通常は機能の観点からグループ化されています。

モジュールのサブルーチン/関数では、 Private : 関数とサブルーチンはそのモジュール内でのみ使用できます。 Public : どこからでも直接アクセスできます。(別のモジュール、別のマクロなど) ユーティリティ関数をモジュールに格納するのは一般的な方法です。

Option Private Moduleモジュール自体を非公開にする は、標準モジュールの先頭に追加できますが、ThisWorkbook や Sheet1 などのオブジェクト モジュールでは許可されません。


ThisWorkbook は Workbook オブジェクトのプライベート モジュールです。たとえば、Workbook_Open()Workbook_Close()ルーチンは、このモジュール内にあります。(ワークブック オブジェクト参照)


同様に、Sheet1、Sheet2 は個々のシートのプライベート モジュールです。その中に、そのシートに固有の機能を入れます。 Worksheet_ActivateWorksheet_DeactivateWorkbook_SheetChangeは、それぞれのプライベートシートモジュール内で処理できるように提供されるデフォルトのイベントです。(ワークシート オブジェクト参照)

@Daniel Cook がコメントで述べたように、ThisWorkbook と WorkSheet のモジュールはモジュールとして、subName()またはモジュールの外部で直接使用することはできませんが、またはfunctionName()を使用してそれらを呼び出すことは引き続き可能です。ThisWorkbook.subName()ThisWorkbook.functionName()


クラス モジュールは、VBA の OOP に最も近いものです。それらにはコンストラクターとデストラクタがあり、インスタンス化してクラス オブジェクトを提供できます。

于 2012-10-18T13:21:11.620 に答える
0

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

于 2012-10-18T13:19:43.823 に答える