VBA beibehalten-Instanzen, nachdem der makro abgeschlossen ist (Excel -)

Ich habe einige Objekte von meinem eigenen, dass ich instanziieren innerhalb ThisWorkbook in Excel. Ich habe einige Probleme und ich denke, das Problem ist, dass VBA zu töten ist meine Instanzen, sobald das makro beendet wird.

Verwenden wir ThisWorkbook:

  • Wenn ich definiere meine eigene variable für ThisWorkbook in einem makro die variable, die den Wert wieder auf den Initialisierungs-Wert, nachdem das makro abgeschlossen ist, auch wenn die variable Dim würd in der Klasse ThisWorkbook und nicht in das Modul. (also 0, Nichts, etc.)
  • Wenn instanziiere ich ein Objekt für ThisWorkbook im Workbook_Open() Ereignis, das Objekt wird zerstört, wenn das Ereignis fertig ist brennen. Wieder, auch wenn die variable Dim würd in der Klasse ThisWorkbook und nicht in der sub für Workbook_Open()

Gibt es etwas, was ich tun kann, um sicherzustellen, dass diese Objekte überleben, und diese Variablen behalten Ihre Werte?

In 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

Weder öffnen der Arbeitsmappe noch laufendes Makro 1 Ursache Makro 2 zu finden myInstance. In beiden Fällen Makro2 wird denken, dass myInstance ist Nichts. Makro 2 wird NUR finden, myInstance, wenn es aufgerufen, in Makro 1 oder Open_Workbook (vor Ihrem End Sub). Ich brauche eine Lösung für dieses Problem. (Ich bin diese Makros ausführen von eigenen Formular-buttons, die NICHT in einige andere makro.)

Wie wärs wenn du machen es eine öffentliche variable? Und definieren Sie es an einem anderen Modul. Ich sollte wissen, offhand, wenn dies helfen wird, aber ich weiß nicht.
Vermute es ist ein Tippfehler hier, aber Sie haben Open_Workbook() im code statt Workbook_Open()
Ja, das ist ein Tippfehler.
Kann es nicht eine öffentliche variable, denn es ist ein Benutzer-definiertes Objekt.

InformationsquelleAutor geofurb | 2012-11-13

Schreibe einen Kommentar