Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1416to1420
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Das Bewahren von Inhalten globaler Variablen

Das Bewahren von Inhalten globaler Variablen
26.03.2015 12:42:37
Inhalten
Hallo alle zusammen,
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.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Das Bewahren von Inhalten globaler Variablen
26.03.2015 12:51:16
Inhalten
Hallo,
das geht nicht. Die einzige Lösung, du initialisierst die Klasse nach dem erstellen der Boxen entkoppelt von der Erstell-Prozedur. Sprich vor dem End Sub in der Erstellprozedur die OnTime-Methode anwenden um die Initialisierungs-Routine zu starten.
Gruß
Nepumuk

AW: Das Bewahren von Inhalten globaler Variablen
26.03.2015 13:15:00
Inhalten
Hey, ein zeitgesteuertes Makro ist eine super Idee!! Damit könnte es echt gehen, anders wüsste ich auch nicht wie. (Schade, dass man ActiveX nicht einfach in den Eigenschaften ein Makro zuordnen kann.)
Ich werde mich mit OnTime befassen, hoffentlich funktioniert das dann.

AW: Das Bewahren von Inhalten globaler Variablen
26.03.2015 13:37:25
Inhalten
Hi
wenns auch das KLICK-Event sein darf:
erstelle die Comboboxen aus den Formularsteuerelementen.
schreibe das Klick-Eventmarko als normales Makro in einem allgemeinen Modul
verknüpfe beim Erstellen das die Combobox mit .OnAction = "Makroname" mit dem Makro.
bei klick auf die Combobox wird dann das makro ausgeführt.
Diese Einstellung ist permanent und wird auch mit gespeichert, dh sie ist nach dem wiederöffnen auch noch da.
Über Application.Caller kannst du im code ermitteln, welches Steuerelement das Makro aufgerufen hat und so ggf differenziert handeln.
Gruß Daniel

Anzeige
AW: Das Bewahren von Inhalten globaler Variablen
26.03.2015 14:01:13
Inhalten
Danke Daniel, den Tipp mit den Formularsteuerelementen hast du mir ja gestern schon gegeben. Ich würde nur gerne bei den ActiveX Elementen und der Klasse bleiben, da sie mehr Möglichkeiten bieten.
Application.OnTime hab ich jetzt verstanden und eigentlich sollte das tatsächlich funktionieren. Das werde ich sehen, wenn ich es mühevoll eingebaut habe.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige