Hallo zusammen,
ich entwickle gerade ein ziemlich umfangreiches VBA-Projekt für MS-Word, wobei ich manchmal bestimmte Tasten(kombinationen) abfangen muss.
Dabei handelt es sich unter anderem um ENTER, BACKSPACE und ENTF, die ich mit Hilfe von KeyBindings abfange und damit jeweils eine bestimmte Prozedur von mir auslöse. Eigentlich müssen diese Tasten aber nur in seltenen Ausnahmebedingungen wirklich abgefangen werden. Mein Problem ist jetzt aber, dass das entsprechende Event natürlich stets „feuert“ und meine Prodzedur aufruft sobald eine dieser Tasten gedrückt wird, auch wenn diese Bedingung gar nicht zutrifft.
Leider scheint es aber keinen Befehl bzw. Paremeter zu geben, um VBA mitzuteilen, den Tastendruck in so einem Fall „ganz normal“ abzuarbeiten. Zwar kann ich natürlich eine „SendKeys“-Anweisung benutzen, allerdings führt das dann natürlich einfach zu einem weiteren (rekursiven) Aufruf eben dieser Funktion durch den hinterlegten Event Handler.
Ich bräuchte also eine Art
IF (meine Bedingung) = true then
call meine_spezialprozedur
ELSE
[TASTE-AN-WORD-WEITERREICHEN]
END IF
Wenn ich einfach das KeyBinding kurzfristig deaktiviere („FindKey(KEY_CODE).disable“) um ein „SendKeys“-Kommando abzuschicken löse ich damit bizarrerweise trotzdem das Event aus (obwohl das Binding tatsächlich nicht mehr existiert, auch eine gewisse Wartezeit bringt hier nichts).
Allgemein habe ich also massiv das Problem, dass ich Event Handler nur sehr allgemein formulieren kann und dann sehr viele Ausnahmebedingungen schreiben muss und dabei längst nicht alles glatt läuft.
Auch gelingt es mir nicht, zuverlässig zu unterscheiden, ob nun ein abgefangenes Event wirklich vom Anwender ausgelöst wurde oder nur von mir selbst. Ich setzte dann immer manuell Unmengen von Flags um sowas herauszufinden. Wenn ich während umfangreicher Operationen die Überwachung von Events abschalten könnte, wäre mir das schon eine Hilfe.
Ein weiteres Problem: In Word selbst lassen sich die genannten drei Tasten nicht als Tastenkürzel für ein Makro hinterlegen (BACKSPACE löscht die Kombination einfach, ENTFERNEN wird nicht erkennt und ENTER schließt das Fenster). Aus diesen Grund muss ich diese KeyBindings per VBA-Code setzen. Dummerweise scheinen so gesetzte KeyBindings allerdings global zu sein, beinflussen also die gesamte Anwendung und bleiben selbst nach einem Neustart erhalten. Ist nicht irgendwie möglich, diese Tastenkürzel nur auf die verwendete Vorlage einzugrenzen, ähnlich wie es mit den Symbolleisten möglich ist? Für alle über das entsprechende Word-Menu selbst gesetzten Tastenkürzel scheint genau das zu gelten…
Kann mir jemand da mal ein paar Tipp geben? Ich habe gelesen, mit einer Klasse bzw. einem Klassemodul liese sowas event. besser eingrenzen? Wäre wirklich für Hilfe dankbar, da stecken jetzt schon einige Monate Arbeit drin.
spyro