Lebensdauer von Variablen
#11
Hallo snb,

vielen Dank für die ausführliche Antwort.

Leider ist sie offensichtlich nicht ganz korrekt.
Zitat:Wenn die Arbeitsmappe (VBProject) beendet wird, sind alle Variablen 'verschwunden'.
Das ist ja eben nicht so. Wenn Du einer Public Variablen einen Wert zuweist, bleibt er auch nach Ende des Projekts bestehen. Bei einem erneuten Start, ist die Variable weiterhin mit dem alten Wert gefüllt. Ob es IMMER so ist, weiß ich nicht, aber zumindest MEISTENS.
Und genau das war ja mein Problem...

Noch eine Frage zum Hide.
Ich habe mal gelernt, dass ich ein UF IMMER mit Unload leeren muss, ein Hide blendet es nur aus.
Ist es ein Problem, ein UF nur auszublenden und es nirgendwo im Projekt zu leeren?

Gruß,
Lutz
Antworten Top
#12
Ersetze "beendet" durch "geschlossen". Snb ist kein Muttersprachler
Antworten Top
#13
Hallo Warkings,

soll heißen, die .xmls-Datei muss wirklich geschlossen werden, damit die Variablen leer sind?
Gut, das ist zumindest bei mir in der Regel keine Option.

Gruß,
Lutz
Antworten Top
#14
Ich habe nur die Wortwahl korrigiert.


Abgesehen davon gibt es mehrere Möglichkeiten, eine globale Variable zu leeren. Eine davon ist, die Arbeitsmappe zu schließen.
Andere kann man leicht ergooglen.

Und was am besten hilft: selber probieren.


PS Frage ist natürlich auch, was ist mit leeren gemeint? Initialwert setzen, benutzten Arbeitsspeicher freigeben, ....
PPS  Understanding scope and visibility (VBA) | Microsoft Learn   Understanding the lifetime of variables (VBA) | Microsoft Learn
Antworten Top
#15
Man sollte so viel wie möglich verzichten auf Public Variables. Man braucht die sehr selten.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • HKindler
Antworten Top
#16
Hi Lutz,

wie snb schon sagte: verzichte auf Public-Variablen.

Ich arbeite nicht oft mit Userformen, aber wenn ich dein Problem richtig verstanden habe, dann rufst du eine UF auf, um bestimmte Einstellungen für einen SAP-Aufruf zu machen. Wenn der gut geht, soll alles in der UF vergessen werden bzw. auf irgendwelche Defaults gesetzt werden. Wenn der Aufruf schief läuft, dann soll die UF mit den bisherigen Eingaben erneut angezeigt werden.

Ich sehe zwei Möglichkeiten:

1. du bleibst bei deiner bisherigen Vorgehensweise und führst eine weitere Public-Variable ein, die anzeigt, ob die anderen Public-Variablen oder die Default-Werte (oder von mir aus auch leere Textboxen) verwendet werden sollen. Diese Varaibale setzt du vor dem Aufruf auf den gewünschten Wert. Das ist ja auch das, was bisher vorgeschlagen wurde.

2. du verwendest Hide und Unload so, wie sie gedacht sind. Soll heißen: wenn du die UF nicht mehr brauchst, wird sie entladen. Solange sie noch gebraucht werden könnte, wird sie nur versteckt. Oder anders ausgedrückt: Zum Schließen der UF wird nicht UnLoad verwendet, sondern Hide. Dann wird der SAP-Aufruf gestartet. Geht der schief, wird die UF erneut per Show aufgerufen. Dabei sind die Variablen alle noch auf dem alten Wert. War der SAP-Aufruf ok, dann wird die Userform mit UnLoad endgültig geschlossen. Wird sie später nochmals aufgerufen, dann hat sie automatisch die Default-Werte gesetzt (also das, was bei Initialize gemacht wird bzw. das, was beim Desing der UF ursprünglich gesetzt wurde).

Ich würde Methode 2 verwenden.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#17
(20.10.2023, 15:36)HKindler schrieb: ... um bestimmte Einstellungen für einen SAP-Aufruf zu machen...

VBA - SAP-Datenexport via VBA - MS-Office-Forum
Scheint dann ein never ending Projekt zu sein ROTFL. Es sieht so aus, dass der Begriff Klasse, Objekt usw. noch immer ein Mysterium für den OP ist
Antworten Top
#18
@Helmut, vielen Dank für die ausführliche Erklärung. Auch wenn der Code aktuell läuft, werde ich probieren das entsprechend anzupassen.

@Warkings, ist zum Glück kein never ending project, sondern ein weiteres. Klasse und Objekt sind mir kein Mysterium, aber ganz klar auch nicht. Bin eben kein Programmierer, sondern mache das ganze nebenbei um meinen Kollegen und mir die Arbeit zu erleichtern.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste