So schreiben Sie Makros mit Doppelfunktion

Um ein möglichst zügiges Arbeiten mit Ihren selbstgeschriebenen Makros zu gewährleisten, legen Sie normalerweise für jedes Makro eine eigene Schaltfläche in einer der Symbolleisten an. So können Sie die Makros bequem mit einem Mausklick starten.


   Manchmal möchte man die vom Makro ausgeführte Aktion wieder rückgängig machen oder den gegenteiligen Effekt erzielen. Das ist etwa beim Vergrößern und Verkleinern von Absatzabständen der Fall und beim Vergrößern und Verkleinern der Zoomansicht. Dann wird ein zweites Makro fällig und damit auch eine weitere Schaltfläche in der Symbolleiste.


   Wesentlich sinnvoller wäre es in solchen Situationen jedoch, beide Funktionen mit Hilfe eines einzigen Makros auszuführen in Abhängigkeit von einer zusätzlich gedrückten Taste. Bei einem Makro zum Verändern des Zoomfaktors würde das somit bedeuten: normalerweise Zoomfaktor vergrößern, bei gleichzeitig gedrückter [Shift]-Taste verkleinern. Das zu realisieren ist ziemlich einfach; Sie benötigen dafür lediglich den API-Funktionsaufruf "GetAsync KeyState". Er liefert die benötigte Zusatzinformation beim Start des Makros.


   Zoomen leichtgemacht: Im Folgenden werden anhand eines Makros zum schrittweisen Vergrößern und Verkleinern des Zoomfaktors von Word97 die Funktionsweise und die wichtigsten Befehle eines Makros mit Doppelfunktion erläutert. Zuerst öffnen Sie den Visual Basic Editor mit Hilfe der Tastenkombination [Alt] [F11]. Wählen Sie dann das Modul, in dem Sie das neue Makro erzeugen wollen, mit einem Doppelklick aus. Im Codefenster aktivieren Sie nun mit Hilfe des rechten oberen Pulldown-Menüs den Bereich "(Deklarationen)". An diese Stelle des Moduls schreiben Sie die im Kasten unter "Deklaration" abgedruckte Zeile. Sie meldet die benötigte API-Funktion im Modul an. Danach springen Sie mit [Strg] [Ende] an das untere Ende des Modulfensters und geben dort den abgebildeten Makrocode ein.


   Tastatur abfragen: Das Makro wartet zu Beginn in einer kleinen Zeitschleife den eventuellen Tastendruck ab und ermittelt über den API-Funktionsaufruf den Zustand der relevanten Taste. Die Funktion liefert eine Integerzahl, von der allerdings nur ein einziges Bit von Bedeutung ist. Deshalb wird es mit dem "AND"- Operator ausgefiltert und mit Hilfe der "CBOOL"-Funktion in einen Booleschen Wert - also "wahr" oder "falsch" - umgewandelt. Für die in Frage kommenden Tasten [Shift], [Strg] und [Esc] stellt Visual Basic for Applications globale Konstanten bereit, die Sie jederzeit benutzen können: "vbKeyShift", "vbKeyControl" und "vbKey Escape".


   Schaltfläche erzeugen: Bevor Sie das Makro verwenden können, müssen Sie dafür noch eine Schaltfläche in einer Symbolleiste anlegen. Klicken Sie mit der rechten Maustaste auf eine der Symbolleisten und wählen Sie "Anpassen | Befehle". Nachdem Sie in dem Bereich "Kategorien" den Eintrag "Makros" markiert haben, können Sie das neue Makro per Drag-and-drop aus dem "Befehle"-Bereich in die gewünschte Symbolleiste ziehen. Verpassen Sie der Schaltfläche noch ein geeignetes Symbol und "Schließen" Sie danach das "Anpassen"-Fenster wieder.


   Das Makro mit Doppelfunktion ist jetzt einsatzbereit. Betätigen Sie beim Start des Makros keine Taste, so wird der Zoomfaktor um zehn Prozent vergrößert. Halten Sie jedoch die [Shift]-Taste während des Klicks auf das Makrosymbol gedrückt, so verringert sich der Zoomfaktor um zehn Prozent. Wenn Sie eine andere "Schrittweite" als zehn Prozent wünschen, dann ersetzen Sie die "10" in der Zeile "Const Schrittweite" durch den entsprechenden Wert.

Gerhard Frey

 
Makro zum Vergrößern und Verkleinern des Zoomfaktors



Deklaration:


   Private Declare Function GetAsyncKeyState Lib *
* "User32" (ByVal intKey As Integer) As Integer

á
Makro-Code:


   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

 
* nicht umbrechen, sondern in der oberen Zeile fortsetzen.