Stephan hat geschrieben:gogo hat geschrieben:Eine Fehlerroutine ohne Prompt ist keine Lösung, da das Makro ja nur schwierig zwischen einem "echten Fehler" und einem Fehler der durch das Schließen entstanden ist unterscheiden kann.
(Was meint hier "Prompt"?)
z.B. Eine Messagebox mit dem Fehlercode etc. - jedenfalls etwas das den Code anhält.
Stephan hat geschrieben:Ansonsten sollte sich ein Fehler durch Schliessen doch genauso auswirken wie du es beschreibst, also ist das Steuerelement nicht mehr gegenwärtig wurde geschlossen oder welchen andersartigen Fehler könntest du Dir denken, der sich gleich manifestiert und eine Unterscheidung unmöglich machen würde?
Unter der Annahme das der Code einmal läuft und getestet ist sehe ich einfach nichts Wahrscheinliches was dazu führen könnte das der gleiche Fehler wie beim Schließen aufträte.
Das Problem ist, dass ein und derselbe Fehler einmal ein Bug ist und ein anderes mal ein "ignorierbarer Fehler".
z.B.:
- beim Anzeigen eines Datensatzes in einem Formular wird ein Listenfeld gefüllt
- Das Füllen des Feldes erfolgt in mehreren Schritten (Union-Abfrage) und dauert 1-2 Sekunden.
Das Makro startet also mit dem entsprechenden Ereignis, der User "bricht aber ggf. ab" indem er das Fenster schließt.
Bei der Belegung der Objektvariable mit dem Listenfeld-Objekt ist das Listenfeld-Objekt ja vorhanden, nach dem Schließen des Fensters nicht mehr - ergo Error.
Tritt der Fehler beim Öffnen des Formulars auf (weil das Ereignis "nach dem Datensatzwechsel" ausgeführt wird bevor das Formular noch vollständig geladen ist) so tritt derselbe Error auf.
Entseht ein Fehler weil der User das Formular geschlossen hat, so ist es ein "ignorierbarer Fehler".
Entsteht ein Fehler durch sonst ein Problem (wie oben beschrieben oder durch ein Timeout etc.) dann ist das ein Bug und der Fehler muss angezeigt werden.
Klar kann man diesen einen "Fehler" durch diverse Maßnahmen abfangen und auch unterscheiden, ich dachte nur, dass es evtl. eine Möglichkeit gibt ein Makro an einen Frame zu binden, sodass es abgebrochen wird wenn der Frame geschlossen wird.
Stephan hat geschrieben:Falls dir das trotzdem zu unsicher ist lass ein Makro durch das Schliessen-Ereignis starten (Extras-Anpasssen-Ereignisse) und eine Variable auf einen bestimmten Wert setzen und kontrolliere bim NIchtvorhandensein des steuerelements auch den Wert dieser Variable um zu wissen ob geschlossen wurde.
Gute Idee - Danke, damit ist nämlich auch meine nächste Frage beantwortet. Der erste sehr einfache Lösungsansatz war einfach bei Makrobeginn die Schließen-Schaltfläche zu deaktiveren:
Code: Alles auswählen
Sub Makrostart
oform = ...
oform.getbyname("Button_Schliessen").Enabled = false
...
oform.getbyname("Button_Schliessen").Enabled = true
end sub
... und am Ende wieder zu aktivieren - geht schnell und einfach, bringt aber nix wenn 2 Makros zeitgleich laufen. Damit ist aber zumindest das Schließen per Button verhindert, nicht aber das Schließen per "Kreuzchen rechts oben im Fenster" oder wenn die Applikation als Ganzes geschlossen wird. Da ich aber sowieso einen ganzen Haufen globaler Variablen habe, wird eine mehr oder weniger nicht so ins Gewicht fallen.