「excel vba オブジェクト変数はパブリック変数にならない?」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。
Excel VBAで、オブジェクトへの参照情報を代入する変数を、Publicで宣言するグローバル変数にできないのかどうかを調べていらしたのでしょう。
まずは結論を。オブジェクト変数をグローバル変数にすることは、可能です。
オブジェクト変数をグローバル変数として使えることを確認しよう
コードを作成・実行して確認しましょう。
グローバルなオブジェクト変数の宣言
まず、いずれかの標準モジュールに、以下のようなWorkbook型のオブジェクト変数をPubilcキーワードで宣言してください。
Pubilcで宣言しているので、オブジェクト変数g_bookは、別のモジュールからも参照できるグローバル変数になっています。
グローバルなオブジェクト変数への代入
次に、先ほどとは別の標準モジュールに、以下のSubプロシージャを作成してください。
Set g_book = ActiveWorkbook
End Sub
こちらはオブジェクト変数g_bookに、ActiveWorkbookプロパティで取得した、アクティブなブックを表すWorkbookオブジェクトへの参照を代入するだけのプロシージャです。
グローバルなオブジェクト変数の参照
つづいて、オブジェクト変数g_bookを宣言しているモジュールとも、sample_1プロシージャの含まれるモジュールとは別の標準モジュールに以下のSubプロシージャを作成です。
If g_book Is Nothing Then Exit Sub
MsgBox g_book.Name
End Sub
オブジェクト変数g_bookに代入されているWorkbookオブジェクトのNameプロパティを使って、ブックの名前を取得し、メッセージボックスに表示するプロシージャです。
sample_1マクロを実行してから、sample_2マクロを実行すれば、sample_1マクロを実行したときにアクティブだったブックの名前がメッセージボックスに表示されます。
- Newer:wdHeaderFooterPrimaryとは
- Older:Word VBAでページの先頭にカーソルを移動する
Home » エクセルマクロ・Excel VBAの使い方 » オブジェクト変数はグローバル変数にならない??