Hallo allerseits!
Brauche wieder mal etwas Hilfe: In einem schon recht komplexen Word-Makro (VBA) werden Text-Dateien ein Stück weit automatisch bearbeitet. Dann soll das Makro eine Pause machen, bis der User - in meinem Fall und vorzugsweise - die ESC-Taste (Escape) drückt. Danach soll das Makro seine Arbeit wieder aufnehmen und die Verarbeitung fortsetzen.
Nachfolgend gleich die Lösung, die ich mittlerweile habe. Dabei gibt es aber div. Probleme: Z.B. blinkt der Cursor nicht (was bei dieser Textbearbeitung für den User halt sehr wichtig wäre) während der User den Text in Word bearbeitet, ferner verschindet der Cursor zeitweilig ganz und zusätzlich muss zum Ausführen eines Makros (mit AutoHotKey!) manchmal noch eine weitere Taste gedrückt werden, bis das (AutoHotKey-)Makro vollständig ausgeführt wird.
Ich habe folgende Deklarationen
Die eigentliche WARTE-Routine sieht bei mir wie folgt aus:
und dann noch die ESCAPE-Funktion wie folgt:
Hoffe sehr, dass mir jemand weiterhelfen kann und danke im Voraus für jeglichen Beitrag.
Beste Grüsse
Brauche wieder mal etwas Hilfe: In einem schon recht komplexen Word-Makro (VBA) werden Text-Dateien ein Stück weit automatisch bearbeitet. Dann soll das Makro eine Pause machen, bis der User - in meinem Fall und vorzugsweise - die ESC-Taste (Escape) drückt. Danach soll das Makro seine Arbeit wieder aufnehmen und die Verarbeitung fortsetzen.
Nachfolgend gleich die Lösung, die ich mittlerweile habe. Dabei gibt es aber div. Probleme: Z.B. blinkt der Cursor nicht (was bei dieser Textbearbeitung für den User halt sehr wichtig wäre) während der User den Text in Word bearbeitet, ferner verschindet der Cursor zeitweilig ganz und zusätzlich muss zum Ausführen eines Makros (mit AutoHotKey!) manchmal noch eine weitere Taste gedrückt werden, bis das (AutoHotKey-)Makro vollständig ausgeführt wird.
Quellcode
- Sub Hauptprogramm
- ...
- ruft diverse Subs und Funktionen auf
- ...
- und soll dann hier (innerhalb einer Schlaufe der Hauptroutine)
- auf die Eingaben (Text-Änderungen) warten und die Verarbeitung
- an dieser Stelle erst fortsetzen, wenn der User hier die ESC-Taste drückt.
- ...
- dann werden weitere Subs aufgerufen
- ...
Ich habe folgende Deklarationen
Quellcode
- ' Das Abgreifen der Tasten-Drucke wird aus dieser Lib ermöglicht
- Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
- ' Das Warten mit 'Sleep' wird aus dieser Lib ermöglicht
- Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
- ' Die Esc-Taste wird als Konstante deklariert
- Public Const VK_ESCAPE = &H1B
Die eigentliche WARTE-Routine sieht bei mir wie folgt aus:
Quellcode
- Sub WarteAufEscapeTaste()
- 'Dim intSekundenZaehler As Long
- Application.StatusBar = "Warte auf ESC-Taste"
- bolESCTaste = ESCTaste()
- While Not bolESCTaste
- DoEvents ' Das System andere Events/Tasks ausführen lassen
- Sleep (50) ' Stehenbleiben länger
- 'Application.StatusBar = "Warte auf ESC-Taste (" + CStr(intSekundenZaehler / 10) + ") Sekunden."
- 'Application.StatusBar = "Warte auf ESC-Taste"
- bolESCTaste = ESCTaste()
- 'intSekundenZaehler = intSekundenZaehler + 1
- Wend
- Application.StatusBar = ""
- If bolESCTaste Then
- ' Hier die Verarbeitung sauber abschliessen
- DoEvents
- End If
- Sleep (500)
- End Sub
und dann noch die ESCAPE-Funktion wie folgt:
Hoffe sehr, dass mir jemand weiterhelfen kann und danke im Voraus für jeglichen Beitrag.
Beste Grüsse