![]() |
||
![]() |
Makro mit Doppelfunktion unter Office 97Um 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 IntegerIm 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 SubWIN-CODE: ZOOM |
![]() |