Userform_initialize aus einer anderen Userform anstoßen?
#1
Hallo Gemeinde,

1. Ich habe eine Tabelle mit mehreren Spalten
2. In einer Userform (nennen wir sie hier Userform2) wird mir der inhalt der Tabelle in einer Listbox dargestellt
3. wenn ich eine Zeile markiere und auf den CommandButton "Bearbeiten" klicke, öffnet sich darüber ein neues Userform (Userform3) als PopUp, das diese markierte Zeile entsprechend einliest und in Textboxen darstellt. Ich kann das nun bearbeiten und abspeichern. Dabei schließt sich Userform 3 wieder.

Das Problem ist, dass er mir das dann zwar in die Tabelle den Eintrag richtig ändert, aber die Listbox in Userform2 nicht aktualisiert.
Ich kann natürlich den Befehl geben, dass er die Tabelle ändert und manuell auch in der Listbox den Eintrag ändert, aber das ist ja Pfusch.

Im Prinzip müsste ich das Initialisieren der Userform2 neu anregen können. Darin steht ja, wie er sich die Daten aus der Tabelle ziehen kann.

Dass ich quasi sage: Wenn in Userform3 auf Speichern geklickt wird, schließe Userform 3 und initialisiere UserForm2 neu. Wie bekomme ich das hin?

Es klappt, wenn ich die Userform2 beim Klcik auf Bearbeiten unloade und später wieder .show sage. Das möchte ich aber nicht. Die Form 2 soll unter der Form3 geöffenet bleiben.

Ich hoffe, das war verständlich? =)

Vielen Dank!
Rub
Antworten Top
#2
(21.02.2023, 17:19)RubberBone schrieb: Ich kann natürlich den Befehl geben, dass er die Tabelle ändert und manuell auch in der Listbox den Eintrag ändert, aber das ist ja Pfusch.

Vielleicht ist aber das Beharren auf das Initialize Ereignis Pfusch? Schon mal darüber nachgedacht?
All der Aktualisierungscode, den Du in der Ereignisprozedur stehen hast, hat ja nun so absolut nichts mit dem Initialisierungsereignis zu tun. Vor allem, wann (und warum) wird denn dieses Ereignis aufgerufen? 
Schreib den Code in eine eigene Prozedur und lass sie von mir aus auch im Initialize Ereignis aufrufen, aber Fakt ist, im Ereignis selbst hat er (der Code) nichts zu suchen...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#3
Hallo,

schreib dir doch einfach eine .Refresh()-Methode, die die notwendigen Schritte aus dem Initialize-Eventhandler zusammenfasst. Wenn du diese Public gestaltest, kannst du sie von überall aufrufen. Schlechter Stil wäre es, den Eventhandler selbst aufzurufen (das geht natürlich aus der UserForm2-Klasse heraus).

Mit Ausnahme dessen, dass die meisten Userformen recht unnötigen Overhead produzieren, weil sich Daten viel einfacher und sauberer direkt in Tabellen erfassen lassen, würde ich aber immer eine Objektorientierte herangehensweise empfehlen. Das beinhaltet zum Beispiel, dass du eine Methode deiner jetztigen UserForm3 aufrufst, an deren Rückgabewert du feststellen kannst, ob du Aktualisieren musst, oder nicht. Im Zweifel würde ich auch nicht in die Tabelle schreiben lassen, sondern eine Datenklasse füllen, so dass der Aufrufer für den Umgang mit den Daten verantwortlich ist. Aber das ist letztlich eine akademische Diskussion.

Viele Grüße
derHöpp
Antworten Top


Gehe zu:


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