Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
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

VBA globale Variable nach "End" gelöscht

VBA globale Variable nach "End" gelöscht
14.05.2020 17:18:47
W
Hallo Forum,
ich nutze verschiedene eigene Funktionen für bestimmte Dinge, will damit zum Ausdruck bringen, dass ich
mich zum Zeitpunkt x nicht unbedingt in der Funktion bzw der Sub befinde, die primär aufgerufen wurde.
Da die einzelnen Hilfsfunktionen teilweise vom Ergebnis einer weiteren Hilfsfunktion abhängig sind, und es schier unmöglich ist, das Auftreten eines Fehlers bis in die Ursprungs-Function/Sub zurückzumelden, beende ich die Makroausführung mit einem "End" in dem Code, in welchem der Fehler festgestellt wurde. Damit ist sichergestellt, dass nicht mit falschen Daten weitergearbeitet wird.
Mein aktuelles Problem dabei: In der Workbook_Open-Routine werden verschiedene globale Variable gesetzt. Nach einem Abbruch mit "End" sind diese Variablen alle nicht mehr gesetzt.
Wie kann ich dieses Problem lösen? Wer hat dazu eine Idee?
Gruß
W H21

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 17:41:45
onur
Microsoft:
END:
Beendet die Ausführung sofort. Wird nie für sich selbst benötigt, kann jedoch an einer beliebigen Stelle in einer Prozedur eingefügt werden, um die Codeausführung zu beenden, Dateien, die mit der Open -Anweisung geöffnet wurden, zu schließen und Variablen zu löschen.
Entweder, wenn möglich, die Werte im Code setzen, oder in irgend einer Zelle zwischenspeichern.
Oder natürlich "END" löschen.
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 17:59:27
Rudi
Hallo,
&gt &gtbeende ich die Makroausführung mit einem "End" in dem Code, in welchem der Fehler festgestellt wurde. &lt &lt
Exit Sub statt End
Gruß
Rudi
Anzeige
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:10:16
W
Hallo Rudi,
auch Dir herzlichen Dank für Deinen Vorschlag. Allerdings wird durch "Exit Sub" die Kontrolle an den aufrufenden Code zurückgegeben, der möglicherweise eine Antwort erwartet, die nicht gegeben wird. Die Folge: unabsehbar.
Bitte noch einmal meine Anfrage genau lesen.
Gruß
W H21
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:07:49
W
Hallo onur,
Danke für Deine Antwort. "End" zu löschen kommt nicht in frage. Die Begründung steht in meiner Anfrage.
Workbook-Open ein 2. mal zu durchlaufen ist auch nicht die Lösung. Aber Dein Vorschlag, die Werte in einer Tabelle zu speichern, die gefällt mir. Muss mir jetzt nur noch einen passenden Platz dafür aussuchen.
Gruß
W H21
Anzeige
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:10:50
Rudi
Hallo,
&gt&gtAber Dein Vorschlag, die Werte in einer Tabelle zu speichern&lt&lt
Alternativ kannst du die Werte auch in Namen speichern.
Gruß
Rudi
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:12:19
W
Hallo Rudi,
was genau meinst du mit "Namen"?
Gruß
W H21
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:18:36
Daniel
was bringts wenn die Werte in Tabellen oder Namen stehen?
dann sind sie immer noch nicht in den Variablen drin.
dh der Code zum Befüllen der Variablen muss troztdem ausgeführt werden, oder man muss den kompletten Quellcode so umschreiben, dass anstelle der globalen Variablen die Tabellenwerte oder Namen verwendet werden. Wird auf jedenfall umständlich, vorallem dann wenn die Globalen Variablen Objektvariablen sind.
dann wird aus der kurzen variable wsEingabe (bspw für das Worksheet mit dein Eingabefeldern) ein umständliches: Worksheets(Sheets("Variablen").Range("A1").Value)
scheint mir nicht sinnvoll.
Gruß Daniel
Anzeige
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:34:37
W
Hallo Daniel,
ich möchte auch diese Antwort von Dir beantworten.
Im aktuellen Projekt geht es um eine Boolean-Variable und eine Integer-Variable, die nach "End" neu gesetzt werden müssen. Normalerweise werden sie in Workbook_Open gesetzt. Und im Normalfall gibt es nur eine Funktion, welche der Anwender per Klick aufruft. Dort müssten diese beiden Werte wieder auf den Stand gebracht werden, wie sie in Workbook-Open gesetzt wurden. Ich möchte aber nicht nochmals eine Stelle im Code haben, wo entschieden wird, wie diese beiden Variablen gesetzt werden sollen. Das soll ausschließlich in Workbook_Open geschehen.
Gruß
W H21
Anzeige
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:46:39
Daniel
Hi
gibt's auch Eventmakros, die die diese Variablen verwenden?
wenn nein, würde ich die Zuweisung doch in dem Makro machen, welches der Anwender starten kann.
Wenn du die Zuweisung unbedingt im Workbook_Open-Eventmakro haben willst, dann kannst du auch, wenn die Variablen nochmal befüllt werden müssen, das Workbook_Open-Event von deinem Makro aus ausführen lassen.
dazu müsst du im Modul "DieseArbeitsmappe" das "Private Sub" in "Public Sub" abändern (auf die Event-funtktionalität hat das keinen Einfluss, solange du den Rest der Kopfzeile nicht änderst) und dann kannst du dieses Makro von jedem anderen Makro aus mit Call DieseArbeitsmappe.Workbook_Open ausführen lassen.
Gruß Daniel
Gruß Daniel
Anzeige
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 19:34:21
Rudi
Hallo Daniel,
&gt&gtwas bringts wenn die Werte in Tabellen oder Namen stehen?&lt&lt
Man muss nur konsequent die Variablen durch die Zellen/ Namen ersetzen. ;-)
Gruß
Rudi
VBA globale Variable nach "End" gelöscht - gelöst
15.05.2020 07:44:29
W
Hallo an alle, die mir auf meine Frage geantwortet haben.
Ich habe das Problem in der Weise gelöst, dass ich in Workbook_Open die erforderlichen Daten in einer bereits vorhandenen Tabelle als nicht sichtbare Einträge an bisher ungenutzter Stelle bereitstelle. Wenn nun der Anwender mit einem "Klick" die Verarbeitung (wieder) startet, wird geprüft, ob die globalen Variablen (die durch "End" ggf. auf "Grundstellung" gebracht wurden) gesetzt waren. Wenn nein (also möglicherweise durch "End" gelöscht), wird in der oben genannten Tabelle geprüft, wie die Einstellungen durch Workbook_Open vorgenommen wurden, und die globalen Variablen werden entsprechend der gesicherten Informationen erneut gesetzt.
Ich möchte nochmals erwähnen, dass es sich in meinem Fall um eine Boolean- und um eine Integer-Variable handelt.
Wird die Tabelle geschlossen und erneut geöffnet, entscheidet nur Workbook_Open, wie die Variablen gesetzt werden, und hinterlegt die Informationen an dem dafür vorgesehenen Platz,
Das Verfahren ist bereits mehrfach getestet und funktioniert.
Nochmals "Danke" für alle Antworten.
Gruß
W H21
Anzeige
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:34:10
onur
Ich persönlich mache das meistens so (fast das Selbe wie Daniels Vorschlag):
Eine Sub, die auch von Workbook_Open aufgerufen wird, (z.B. Sub DatenLesen) zum Beschreiben/Lesen der globalen Variablen inkl. eine Variable (boolean) Namens "eingelesen", die dort auf true gesetzt wird.
Und in allen Subs, wo diese Variablen benötigt werden, am Anfang der Sub:
If NOT eingelesen Then DatenLesen

Sin die Variablen durch (z.B.) ein "END" gelöscht worden, springt "eingelesen" automatisch auf FALSE.
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:01:12
Daniel
Hi
die Idee von Onur mal etwas ausführlicher:
1. Lagere das setzen der Globalen Variablen in ein eigenes Makro aus
2. dieses Makro rufst du dann im Workbook-Open-Event Event auf, sowie am Anfang jedes Makros, welches der Anwender direkt ausführen kann.
sollte das ein aufwendiger Prozess sein, kannst du natürlich beispielhaft den Wert einer solchen Variable abfragen und daran entscheiden, ob das Befüllen ausgeführt werden muss oder nicht.
eine weitere alternative wäre, dass du eine zusätzliche globale Variable vom Typ boolean einfügst, welche anstelle von END im Code auf TRUE gesetzt wird. Diese fragst du dann an geeigneter Stelle ab und kannst das Makro mit Exit Sub verlassen.
Das erspart dir dann das Händling mit den Übergabeparametern.
Gruß Daniel
Anzeige
AW: VBA globale Variable nach "End" gelöscht
14.05.2020 18:25:18
W
Hallo Daniel,
auch Dir herzlichen Dank für Deine Vorschläge.
Deinen ersten Vorschlag muss ich mir noch genau überlegen und ihn gegen den Vorschlag mit dem Auslagern in einen Bereich in einer Tabelle abwägen. Was mich stört: grundlegende Einstellungen werden dann nicht mehr in Workbook_Open gemacht, sondern in einem anderen Code. Übersichtlicher wird die Angelegenheit dadurch nicht.
Der 2 Vorschlag ist nicht realisierbar. Nach jedem Aufruf einer der möglichen Funktionen müsste die globale Variable überprüft werden. Wenn man sich dabei eine Hierachie vorstellt, und die letzte Funktion in der Kette etwas aus dem Internet laden soll, dann müsste jeder der zwischengeschaltenen Funktionen die Variable prüfen und sofort seinen Code verlassen. Und wehe ...... Da ist End in meinen Augen die bessere Möglichkeit. Selbstverständlich sollte der Anwender vom Abbruch und ggf. der Ursache informiert werden. Und er kann den Prozess - ggf. nach Reparatur - erneut starten - und hoffen, dass es dann klappt.
Gruß
W H21
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige