Home » エクセルマクロ・Excel VBAの使い方 » オブジェクト変数はグローバル変数にならない??

オブジェクト変数はグローバル変数にならない??

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2207 ビルド15427.20210 Microsoft Store)

「excel vba オブジェクト変数はパブリック変数にならない?」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。

[スポンサードリンク]

Excel VBAで、オブジェクトへの参照情報を代入する変数を、Publicで宣言するグローバル変数にできないのかどうかを調べていらしたのでしょう。

まずは結論を。オブジェクト変数をグローバル変数にすることは、可能です。

オブジェクト変数をグローバル変数として使えることを確認しよう

コードを作成・実行して確認しましょう。

グローバルなオブジェクト変数の宣言

まず、いずれかの標準モジュールに、以下のようなWorkbook型のオブジェクト変数をPubilcキーワードで宣言してください。

Public g_book As Workbook

Pubilcで宣言しているので、オブジェクト変数g_bookは、別のモジュールからも参照できるグローバル変数になっています。

グローバルなオブジェクト変数への代入

次に、先ほどとは別の標準モジュールに、以下のSubプロシージャを作成してください。

Sub sample_1()
 Set g_book = ActiveWorkbook
End Sub

こちらはオブジェクト変数g_bookに、ActiveWorkbookプロパティで取得した、アクティブなブックを表すWorkbookオブジェクトへの参照を代入するだけのプロシージャです。

グローバルなオブジェクト変数の参照

つづいて、オブジェクト変数g_bookを宣言しているモジュールとも、sample_1プロシージャの含まれるモジュールとは別の標準モジュールに以下のSubプロシージャを作成です。

Sub sample_2()
 If g_book Is Nothing Then Exit Sub
 MsgBox g_book.Name
End Sub

オブジェクト変数g_bookに代入されているWorkbookオブジェクトのNameプロパティを使って、ブックの名前を取得し、メッセージボックスに表示するプロシージャです。

sample_1マクロを実行してから、sample_2マクロを実行すれば、sample_1マクロを実行したときにアクティブだったブックの名前がメッセージボックスに表示されます。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » オブジェクト変数はグローバル変数にならない??

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.