ThisWorkbook
Excel内でインスタンス化する独自のオブジェクトがいくつかあります。問題は、マクロが終了するとすぐに VBA がインスタンスを強制終了していることだと思います。
使用していますThisWorkbook
:
マクロで独自の変数を定義すると
ThisWorkbook
、変数がモジュールではなくクラスで Dim されている場合でも、マクロが完了すると、その変数の値は初期化値に戻りThisWorkbook
ます。(つまり、0、なしなど)イベントでオブジェクトをインスタンス化すると
ThisWorkbook
、Workbook_Open()
イベントの発生が完了するとオブジェクトが破棄されます。繰り返しますが、変数が forThisWorkbook
のサブクラスではなくクラスで Dim されている場合でも、Workbook_Open()
これらのオブジェクトが存続し、これらの変数が値を保持していることを確認するためにできることはありますか?
でThisWorkbook
:
'Object we want to survive
Dim myInstance As MyObject
Private Sub Open_Workbook()
Set myInstance = new MyObject ' Object is instantiated
End Sub
' Macro 1
Public Sub MyMacro()
Set myInstance = new MyObject ' Object is instantiated
End Sub
' Macro 2
Public Sub CheckInstance()
If Not myInstance is Nothing Then
MsgBox "I found an instance!"
End If
End Sub
ワークブックを開いたりマクロ 1 を実行したりしても、マクロ 2 は myInstance を見つけません。どちらの場合も、Macro2 は myInstance が Nothing であると見なします。マクロ 2 は、マクロ 1 または Open_Workbook 内 (End Sub の前) で呼び出された場合にのみ myInstance を検索します。これを修正する必要があります。(これらのマクロは、他のマクロ内ではなく、別のフォーム ボタンから実行しています。)