Hallo,
ich habe leider immer noch ein Problem: VBAs Reihefolge im Event Handling führt leider dazu, dass nach dem Abbrechen der Selektion der falsche Frame den Fokus zurückbekommt.
Kann mir jemand beim Verständnis der Event-Reihenfolge helfen?
Im Detail:
Ich habe zwei Frames (Frame1 und Frame2), die jeweils eine ListBox enthalten.
Frame1 hat eine Sub für den Enter-Event: Frame1_Enter()
In dieser Sub wird SelectElement2 aufgerufen. Die Enter-Sub kann erst weiterlaufen, wenn
a) ein Element selektiert wurde oder
b) die Selektion mit Esc (Taste drücken oder SendKeys-Aufruf) beendet wurde.
Frame1 hat eine Sub für den Exit-Event: Frame1_Exit( ... )
Die Hauptaufgabe dieser Sub besteht darin, die Selektion aus Frame1_Enter abzubrechen. Dazu sende ich mittels Sendkeys zwei Escape-Signale. Code-Auszug:
AppActivate "CATIA V5"
Sendkeys Chr(27), True
Sendkeys Chr(27), True
Frame2 besitzt ebenfalls eine Enter- und Exit-Sub: Frame2_Enter() und Frame2_Exit( ... ), beide zur Zeit ohne wesentliche Funktion.
Folgendes passiert:
1. Ich klicke in den Frame1. Frame1_Enter wird ausgeführt und SelectElement2 wird aufgerufen. Frame1_Enter wartet an dieser Stelle auf das Ende von SelectElement2. Solange ich nichts selektiere oder Esc drücke, wird SelectElement2 und somit auch Frame1_Enter nicht beendet. So weit, so gut.
2. Klicke ich jetzt in Frame2, so wird zuerst Frame1_Exit ausgelöst. Sendkeys schickt die Escapes. Die Escapes werden aber nicht sofort bearbeitet. Stattdessen wird erst Frame1_Exit beendet. Anschließend wird noch Frame2_Enter ausgeführt (ich hatte ja in Frame2 geklickt).
3. Erst jetzt werden die mit SendKeys verschickten Escape verarbeitet. Das ursprünglich in Frame1_Enter gestartete SelectElement2 beendet sich. Dadurch wird Frame1_Enter auch erst jetzt beendet. Dummerweise wandert dadurch der Fokus wieder von Frame2 auf Frame1 zurück.
4. Das hat zur Folge, dass Frame2_Exit und Frame1_Enter wieder ausgeführt werden. Mit anderen Worten: Ich bin genau da, wo ich angefangen habe: In der Selektion von Frame1!!!
Gibt es eine Möglichkeit, dass die mit Sendkeys geschickten Escapes "zwischendurch" verarbeitet werden?
Ohne Erfolg ausprobiert habe ich
- Sendkeys Chr(27), False
- DoEvents() in Frame1_Exit nach den Sendkeys
Hat jemand eine Idee? Oder kann mir jemand ein gutes VBA-Buch empfehlen, in dem das Event Handling beschrieben wird?
Vielen Dank
Günther
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP