Office-Fragen.de
Public Variable verliert Wert - Druckversion

+- Office-Fragen.de (https://office-fragen.de)
+-- Forum: Microsoft Office (https://office-fragen.de/forum-1.html)
+--- Forum: Excel (https://office-fragen.de/forum-2.html)
+--- Thema: Public Variable verliert Wert (/thread-29030.html)



Public Variable verliert Wert - RedBaby - 18.01.2024

Hallo,

ich habe eine Excel-Datei mit mehreren Tabellenblättern und benötige für verschiedene Subs den Wert der letzten Zeile mit Inhalt für jedes Tabellenblatt.
Also habe ich eine Funktion unter "Diese Arbeitsmappe" erstellt, die diese Werte herausfindet und die entsprechenden Variablen oben als Public definiert.

Wenn ich jetzt aber in einem anderen Sub in einem anderen Modul diesen Sub aufrufe, wird der zwar durchgeführt und die Variablen bekommen die richtigen Werte zugewiesen. Wenn der Sub durchgelaufen ist und Excel wieder zurück in den aufrufenden Sub springt, sind dort aber weiterhin alle Variablen leer.

In der Überwachung steht dann für die Variablen "außerhalb des Kontexts" und als Kontext "Diese Arbeitsmappe". Ich habe sie ja aber als Public definiert. Sollten sie dann nicht erhalten bleiben auch in einem anderen Modul? Das war nämlich meine Idee, um Werte aus einem Sub wieder zurückzugeben, da man ja in VBA soweit ich weiß nur Variablen an andere Subs weitergeben kann, aber nicht returnen kann.

Das gleiche Problem habe ich mit einem Array, den ich in einem separaten Sub fülle (dort als Public definiert), und diesen Sub in meiner eigentlichen Prozedur aufrufen will.

Ich habe das Gefühl, ich übersehe da etwas. Vielleicht kann mir ja jemand auf die Sprünge helfen Smile


RE: Public Variable verliert Wert - HKindler - 18.01.2024

Hi,

natürlich kann VBA auch Variablen zurückgeben. Am einfachsten, indem man keine Sub() sondern eine Function() verwendet. Dann gibt es noch die Möglichkeit Variablen ByRef statt ByVal zu übergeben (da sollte man allerdings wissen, was man tut).

Ansonsten kannst du "echte öffentliche Variablen" nur in allgemeinen Modulen und nicht in "DieseArbeitsmappe" definieren.

Noch ein Tipp: auf Public-Variablen sollte man verzichten. Zu schnell passiert es, dass diese "aus Versehen" irgendwo geändert werden. Das kann dann zu überraschenden Fehlern führen, die fast unmöglich zu finden sind. Im Übrigen ist die letzte Zeile eines Blattes jetzt kein Hexenwerk und kann in en Routinen, die das brauchen sehr schnell und sehr leicht selbst bestimmt werden. Diese braucht man also keineswegs als öffentliche Variablen. Vor allem was machst du, wenn der Benutzer zwischendurch irgendwo etwas eingibt und sich dadurch die letzte Zeile verschiebt? Insofern: immer besser diese dann zu bestimmen, wenn man sie braucht.