VBA thisWorkbookの使い方

新しいモジュールを作成することとthisWorkbookに物を置くことはどう違うのですか?

ThisWorkbookはホスト文書です。 これは、VBA プロジェクトを含む Workbook オブジェクトを表します。

ThisWorkbook は、すべての “SheetX” モジュールとともに、VBA が「ドキュメントモジュール」として理解する特殊なクラスモジュールで、これらの特殊モジュールは追加したり削除したりすることはできない。 これらはホストアプリケーション(ここではExcel)が担当します。 ワークシートモジュールを追加するには、ワークブックにワークシートを追加する必要があります。 VBA コードはドキュメント モジュールを New アップすることはできません。それらを作成するには、ライブラリが提供するファクトリー メソッドを使用しなければなりません (.Workbooks.Open, .Workbooks.Add, .Worksheets.Add です)。

オブジェクトなので、そのインスタンスがなければパブリック メンバーを呼び出すことができないのです。 ThisWorkbook は便利な名前のオブジェクトを定義しているので、ThisWorkbook:

ThisWorkbook.SomePublicProcedure "arg1", arg2, 42

ワークシート モジュールも同様ですが、これらはモジュールの (Name) プロパティから名前を取ったオブジェクトを定義しており、デフォルトではシート “Sheet1” の (Name) プロパティは Sheet1 なので、このように修飾できます。

Sheet1.SomePublicProcedure "arg1", arg2, 42

ThisWorkbook はパブリック ユーザー プロシージャと Workbook から継承したすべてのメンバを公開し、Sheet1 はパブリック ユーザー プロシージャと Worksheet から継承したすべてのメンバを公開します。

このワークブックに何を置くべきですか?

ワークブック レベルに属するものすべてです。 つまり、ホスト ドキュメントに影響を与えるコードです。 たとえば、ワークブックが Excel で (マクロを有効にして) 開かれると、Open イベントのハンドラが呼び出されます。

ドキュメントのコードビハインドではできるだけコードを少なくしたいので、イベント ハンドラはイベントに応答して単にプロシージャを呼び出します。

isWorkbook (または Excel UI から特定のシート モジュール) から関数にアクセスする方法はありますか。

マクロが ThisWorkbook オブジェクト名で修飾されていることに注意してください。 標準モジュールはオブジェクトではないので、インスタンス化することはできません。 標準モジュールのパブリック プロシージャは、プロジェクト内のどこからでもアクセスでき、先頭に Option Private Module と書かれていない限り、そのパブリック メンバは Excel から容易に利用できます。

「Excel から利用できる」というのが「数式で使用できる」という意味なら、「UDF として公開」することになり、これらはマクロと同様に ThisWorkbookではなく、標準モジュールに属するものです。

コメントを残す

メールアドレスが公開されることはありません。