見出し画像

【VBA基礎】別Bookのクラスモジュールを利用する方法(memo)

【初めに】

タイトルに"(memo)"のものは一時保存ノートになります。随時情報が更新されます

【概要】

目的:複数のブックから同じ処理を呼び出しつつ 変数の干渉がない独立したインスタンス を生成

【構成】

【処理フロー】

画像
【処理フロー】

【呼出元(Class記述)Book】

画像
[構成]
画像
PJ名変更箇所

[構成]
呼出元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
画像
modB実行結果

【まとめ】

・参照設定を行えば、他ブックからでも安全にインスタンスを生成可能
・複数ブックから同じクラスを呼び出しても、変数は独立して扱える
これにより、VBAプロジェクトの 再利用性・保守性が格段に向上 します。

【最後に】

Log処理等をクラスモジュールに記述し利用すると便利です
それと、ぽちっと”いいね"を押してくれるとすごく喜びます



いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
【VBA基礎】別Bookのクラスモジュールを利用する方法(memo)|YRP-記録ノート
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1