Makro mit Doppelfunktion unter Office 97

Um in Office 97 zügiges Arbeiten mit Ihren selbstgeschriebenen Makros zu ermöglichen, legen Sie normalerweise für jedes einzelne Makro einen eigenen Button in der Menüleiste oder einer speziellen Makro-Symbolleiste an. So können Sie bequem mit einem Mausklick das Makro starten, das die im Programmcode definierte Aufgabe ausführt.
Nun kommt es allerdings nicht selten vor, daß Sie die Aktion wieder zurücksetzen wollen, etwa beim Vergrößern oder Verkleinern des Absatzabstands oder der Zoom-Ansicht. In diesem Fall ist ein zweites Makro fällig – und damit ein weiterer Button in der Symbolleiste. Erheblich sinnvoller ist es, wenn ein und dasselbe Makro in Abhängigkeit von einer zusätzlich gedrückten Taste beide Funktionen übernimmt. Dazu benötigen Sie lediglich einen zusätzlichen API-Funktionsaufruf. Die Funktion GetAsyncKeyState liefert Ihnen die benötigte Zusatzinformation beim Start des Makros. Wie Sie dabei vorgehen, zeigt der nebenstehende Beispiel-Code.
Zunächst melden Sie die benötig- te API-Funktion im Deklarationsabschnitt des Moduls an:

Private Declare Function GetAsyncKeyState Lib "User32"  (ByVal intKey As Integer) As Integer
Im eigentlichen Code-Abschnitt wartet eine kleine Zeitschleife den zusätzlichen Tastendruck ab, bevor der API-Funktionsaufruf den Zustand der entsprechenden Taste ermittelt. Die Funktion GetAsyncKeyState liefert einen Integer-Wert zurück, wovon allerdings nur das erste Bit relevant ist. Deshalb läßt es sich mit dem AND-Operator isolieren und mit der CBOOL-Funktion in einen booleschen Wert konvertieren.
Für die Tasten [Shift], [Ctrl] und [Esc] stellt VBA globale Konstanten bereit: vbKeyShift, vbKeyControl und vbKey- Escape. Der abgebildete Makro-Code demonstriert eine praktische Anwendung für die Vergrößerung (Aufruf ohne [Shift]) und Verkleinerung (Aufruf mit [Shift]) der Zoom-Ansicht.
Zoom-Makro mit Doppelfunktion
Sub Zoom ()

Dim start
Dim shift As Boolean
start = Timer

Do While Timer < start + 0.1
DoEvents
Loop

shift = CBool (GetAsyncKeyState (vbKeyShift) And 1)

Const Schrittweite = 10
Dim Proz
Proz = ActiveWindow.View.Zoom.Percentage

If shift = True Then
Proz = Proz - Schrittweite
If Proz < 10 Then Proz = 10
ElseIf shift = False Then
Proz = Proz + Schrittweite
If Proz > 500 Then Proz = 500
End If

ActiveWindow.View.Zoom.Percentage = Proz

End Sub
WIN-CODE: ZOOM