【VBA基礎】別Bookのクラスモジュールを利用する方法(memo)
【初めに】
タイトルに"(memo)"のものは一時保存ノートになります。随時情報が更新されます
【概要】
目的:複数のブックから同じ処理を呼び出しつつ 変数の干渉がない独立したインスタンス を生成
【構成】
【処理フロー】
【呼出元(Class記述)Book】
[構成]
呼出元Book名:MotoBook.xlsm
プロジェクト名:yobidasiMotoPJ
呼出対象クラス:clsA
クラス呼出用モジュール:modA
[クラス設定]
Instancing=2-PublicNotCreatable
[ソースコード_modA]
' modA=標準モジュール
' clsA=生成対象Class
Public Function CreateA() As clsA
Dim obj As New clsA
Set CreateA = obj
End Function【ソースコード_clsA]
' clsA=クラスモジュール
Private pData As String
Public Property Let Data(value As String)
pData = value
End Property
Public Property Get Data() As String
Data = pData
End Property
Public Function Show() As String
Show = "Data=" & pData
End Function
【呼出Book】
[構成]
呼出元Book名:YobidasiBook.xlsm
プロジェクト名:YobidasiPJ
クラス呼出用モジュール:modB
参照先:MotoBook
[参照設定手順]
呼出PJ選択→上部タブ"ツール"→"参照設定"→ウィンドウ表示
ウィンドウボタン"参照"選択→呼出元Book選択→参照情報を確認
[ソースコード_modB]
' modB=別ブックのモジュール
' yobidasiMotoPJ=呼出対象のPJ名
' claA=呼出したいクラス名
' modA=ClsAと同Bookのクラス呼出用MOD
' Data=clsAのプロシージャ
' Show=clsAのプロシージャ
Sub TestFactory()
Dim obj1 As yobidasiMotoPJ.clsA
Dim obj2 As yobidasiMotoPJ.clsA
' BookA の Factory関数経由でインスタンス生成
Set obj1 = yobidasiMotoPJ.modA.CreateA()
Set obj2 = yobidasiMotoPJ.modA.CreateA()
' 独立した値を設定
obj1.Data = "From B - obj1"
obj2.Data = "From B - obj2"
' 出力確認
Debug.Print obj1.Show ' → "Data=From B - obj1"
Debug.Print obj2.Show ' → "Data=From B - obj2"
End Sub
【まとめ】
・参照設定を行えば、他ブックからでも安全にインスタンスを生成可能
・複数ブックから同じクラスを呼び出しても、変数は独立して扱える
これにより、VBAプロジェクトの 再利用性・保守性が格段に向上 します。
【最後に】
Log処理等をクラスモジュールに記述し利用すると便利です
それと、ぽちっと”いいね"を押してくれるとすごく喜びます


コメント