Userform.show modal Phenomen...
#1
Heje Excelfreunde,

Habe ein Problem/Phenomen, wenn ich eine userform aufrufe...

Vorhanden sind drei userform's uf01, uf02 und uf03.

Aufrufvorgang...

- uf01   -   über bnt01 auf uf01 wird uf02 aufgerufen:    uf02.show vbmodal  (beim Programmieren auf vbmodeless)

-uf02   -   über bnt02 auf uf02 wird uf03 aufgerufen:     uf03.show vbmodal  (beim Programmieren auf vbmodeless)

Auf uf03 gibt es vier comboboxen: cmb01...cmb04 und drei Schalter: sch01 = Zurücksetzen, sch02 = Filter Ein, sch03 = Löschen Ein. Über die comboboxen können Filterkriterien eingestellt werden. Beim Aufruf von uf03 sind die cmb03...cmb04 auf enabled= true gesetzt und die sch01...sch03 auf enabled = false.
Werden Filterkriterien durch die cmb01...cmb04 ausgewählt, werden die sch01...sch03 auf enabled=true gesetzt. sch01 setzt immer alle Einstellungen zurück.
sch02 und sch03 führen, je nach Wahl, die gleiche Aktion aus. elemente werden entsprechend der Filterkriterien gefiltert in in einer Listbox zur Verfügung gestellt.
je nach Auswahl von sch02 oder sch03 werden die verbleibenden Schalter auf enabled= false gesetzt, so der Programmcode.
Im Programmiermodus (vbmodeless) funktioniert der Code auch wie geplant. Dagegen im Anwendermodus (vbmodal) macht der code nicht alles was er soll.

beim aufruf von uf02 = uf02.show vbmodal werden die schalter sch01... sch03 auf uf03 und ausführen einer Aktion durch sch02 oder sch03 nicht auf enabled = false gesetzt.

Beispiel: Aufrufvorgang wie oben...

cmb01...cmb04 enabled = true und sch01 ..sch03 enabled = false  (korrekt)
Es folgt die Auswahl von Kriterien, die sch01...sch03 enabled = true  (korrekt)
Aktion sch02 = Filter Ein wird ausgführt, verbleibende Schalter sch01 und sch03 solllten auf enabled = false gehen, tun sie aber nicht, trotz Programmcode.

Wird hingegend die uf02 = uf02.show vbmodeless aufgrufen, funktioniert der Programmcode wie geplant. uf01 und uf03 können dabei vbmodal oder auch vbmodeless eingestellt sein.

Welcher Grund liegt vor, dass sich der Programmcode so verhält. Die Einstellung der Schalt sch01...sch03 sollten doch wie geplant (programmiert) erfolgen und nicht ob vbmodal oder vbmodeless...

Für Hilfe und Erklärung währe ich sehr dankbar...
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Antworten Top
#2
Hi,


Zitat:Dagegen im Anwendermodus (vbmodal) macht der code nicht alles was er soll.


Genau deshalb ruft man ja eine Form modal auf. Modal aufgerufene Formen verhalten sich wie Messageboxen. Die müssen auch erst geschlossen werden, bevor man weitermachen kann. Das ist also kein Phänomen, sondern Absicht. Wenn beide Modi gleich wären, bräuchte man sie ja auch nicht...:)
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
heje Excelfreunde, Ralf. A,

sein Einwand ist berechtigt...

Bei meiner Beschreibung habe ich schlicht weg vergessen, dass die jeweilige userform geschlossen wird. Der Rückweg erfolgt in gleicher Weise

Beispiel Aufrufvorgang:

- uf01   -   über bnt01 auf uf01 wird uf02 aufgerufen:    uf02.show vbmodal  (beim Programmieren auf vbmodeless), unload  uf01
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Antworten Top
#4
Moin,

ob modal oder modeless legst Du erst in den Eigenschaften der Userform fest, änderst das dann ggf. beim Aufruf. Aber zur Laufzeit der Userform lässt sich der Status nicht mehr ändern.

Grüße

d`r Bastler von den VBAsteleien.de
Win 10 & 11, Office 2019 & 2021 & macOS X.15, XL 2019
Antworten Top
#5
Heje Excelfreunde,

nach stundenlagem Suchen das Problem gelöst...

UF01...Uf03 sind immer modal (Standard) eingestellt, wenn sie gerade im Vordergrund sind und ansonst unload.

Probleme war auf das change - Ereignis der Comboboxen zurückzuführen. Wurden diese durch dem code berührt, dann wurden die change-Ereignisse im
Hindergrund ausgeführt ohne immer etwas zu bemerken (zBsp. App.screenupdating). Mittels boolsche Schalter dieses Verhalten sozusagen eingekapselt, so dass zwar das change-Ereignisse formal ausgeführt wurde, aber der code durch eine if-Abfrage umlaufen wurde.

Das Problemkind war uf03. Habe uf03 bis auf die Ereignisse UserForm_Initialize, UserForm_Activate und UserForm_Terminate vollständig entkernt. Anschließend die einzelnen Routinen sukzessive hinzugefügt und deren Verhalten getest und bei Bedarf an den enstprechenden code-Stellen boolsche Schalter eingefügt. Damit konnte das Problem gelöst werden.

Vieleicht nicht elgant, aber
Vielen Dank
--Janosch
                                                     
Excel  2019 (64bit)  Win 10 Pro (64bit)                              
Antworten Top


Gehe zu:


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