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 KlasseThisWorkbook
und nicht in das Modul. (also 0, Nichts, etc.) - Wenn instanziiere ich ein Objekt für
ThisWorkbook
imWorkbook_Open()
Ereignis, das Objekt wird zerstört, wenn das Ereignis fertig ist brennen. Wieder, auch wenn die variable Dim würd in der KlasseThisWorkbook
und nicht in der sub fürWorkbook_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.)
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, müssen Sie zum erstellen von Variablen außerhalb von Makros.
Andernfalls werden Sie vernichtet immer mit dem Ende des Makros.
Weil Sie unterhielten sich über
Workbook_Open
- speichern Sie Ihre Variablen, auch durch schließen und erneuten öffnen einer Arbeitsmappe, die Sie brauchen würde, ein anderes Konstrukt. Mein Vorschlag wäre speichern Sie Sie in Arbeitsblättern, aber ich glaub es gibt auch andere Methoden zu.Edit:
Getestet, Ihre geposteten code - funktioniert einwandfrei, findet Instanz.
MyObject als Klasse:
Worksheet_Open()
sub, die ich erst instanziieren innerhalbWorksheet_Open()
, so hat es Klasse Rahmen, und sollte überleben. Aber... sobaldWorksheet_Open()
beendet feuern, dieInstance_Destroy()
feuert für das Objekt habe ich instanziiert. (IchInstance_Destroy()
um zu Schießen mir eineMsgBox
so konnte ich sicher sein.) Ich möchte Sie ermutigen, unabhängig zu verifizieren.ok, ich vermute, dass dies ist über Ihre UserDefinedType - haben Sie versucht, um die neue Anweisung außerhalb des Makros?
Private Variable3 As new MyUserDefinedObjectType
? Verwenden Sie ein wenig zu Debuggen, kann nicht finden, meine Beispiele, die schnell ...Ich brauche zu instanziieren des Objekts in meinem makro, aber ich brauche es bestehen nach Beendigung des Makros Schießen.
als Tim Williams schon sagte, in deiner anderen Frage, es scheint etwas hier zu fehlen. Basierend auf dem, was Sie vorgestellt, ich zumindest kann nicht sehen, wo das problem ist. ABER es könnte Probleme geben, basierend auf Ihre UDT/Klasse, je nach Ihrer Struktur. Vielleicht solltest du uns das ganze Bild - außer natürlich Ihrer letzten exampled nicht funktioniert, mit meinem einfachen Objekt, wie es für mich getan hat.
Ich kann nicht den ganzen code, aber wenn Sie vorschlagen können, mögliche Probleme, könnte mir diese Symptome kann ich die relevanten Abschnitte des Codes.
InformationsquelleAutor Jook
Erstellen Sie ein neues Modul für das Projekt im VBA-editor (
Module1
), und fügen diesen code ein:Dann fügen Sie eine Zeile hinzu, um zum Beispiel das Arbeitsblatt Aktivieren oder das Open-Ereignis:
Es für mich funktionierte, war der Wert Inkrementieren jedes mal, wenn ich aktiviert das Blatt.
Siehe: stackoverflow.com/questions/13365758/... aus dem Grund bin ich mit diesem problem.
ich danke Ihnen so sehr. Was ist, wenn ich nicht wollen, dass der Wert jedes mal erhöht - wie kann ich das unterbinden? jede Hilfe/Beratung wäre sehr geschätzt 🙂
InformationsquelleAutor Imre Greilich
warum nicht versuchen, zu verwenden array? Sie dim außerhalb des Makros und es wird die Daten zu halten, bis Sie Sie löschen mit einem anderen makro oder Schießen Sie die Arbeitsmappe aus.
InformationsquelleAutor lazov