ich habe in Excel VBA folgendes Problem. Ich will, dass mir Werte und Referenzen in globalen Variablen erhalten bleiben, auch über die Laufzeit eines Makros hinaus. Globale Variablen können das normalerweise, sind aber sehr anfällig, ihren Inhalt zu vergessen... Wenn ich primitive Daten habe, ist das ja kein Thema. Ich könnte es mit GetSetting/SaveSetting machen oder einfach in Excelzellen reinschreiben. Aber mir geht es um Objektreferenzen komplexer Datentypen!
Wenn ich beispielsweise eine ComboBox erstellt habe mit
Dim box as MSForms.ComboBox
...
Set box = Tabelle1.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=x, Top:=y, Height:=h, Width:=w).Object
dann möchte ich genau diese Box auch später wieder ansprechen können, nur ist die Variable dann eventuell wieder Nothing.
Die Grundfrage lautet also entweder
Wie kann ich die Objektreferenz zwischenspeichern?
oder
Wie kann ich die Box später ohne Referenz wieder ansprechen? (Naja, mit for each vielleicht...)
Aber das war eher eine Verständnisfrage, denn für mein wahres Problem würde auch eine Zwischenspeicherung der Referenz nichts nützen; die globale Variable muss ihren Inhalt behalten. Das Hauptproblem:
Ich habe mehrere ComboBoxen, die alle dasselbe Change-Event haben sollen. Da manche Boxen erst während der Laufzeit erstellt werden, kann ich nicht schon vorher Events bereitstellen, es muss also ein Event auf alle reagieren. Lösen wollte ich das durch ein Klassenmodul, basierend auf dieser Anleitung:
http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0178.shtml
Soweit war das ja auch schön, nur da ich ja Boxen während der Laufzeit erstelle, springt er in den Entwurfsmodus und am Ende wieder raus und löscht dabei alle globalen Variablen!! Inklusive des Klassenarrays, welches alle ja Boxen enthält. Nur über dieses (gefüllte) Array würde er aber anspringen und das Event ausführen.
Da bin ich jetzt in einem Dilemma, denn weiterer Code würde ja erst durch ein Event ausgelöst werden. Also wenn er sich die Initialisierung des Array nicht aus dem vorherigen Makro merkt, kann ich kein Event ausführen und somit auch die Referenzen nicht erneut setzen und somit kein Event ausführen...
Hat jemand irgendeine Idee? Also - mit dem Ansatz des Klassenmoduls - entweder, dass das Array initialisiert bleibt oder dass das Event auf andere Weise reagiert. Oder etwas ganz anderes.