Überarbeiten aufgezeichneter Visual Basic-Makros

Die Makroaufzeichnung ist ein hervorragendes Tool zum Ermitteln der Visual Basic-Methoden und -Eigenschaften, die Sie verwenden möchten. Wenn Sie nicht wissen, welche Eigenschaften oder Methoden Sie verwenden sollen, aktivieren Sie die Makroaufzeichnung, und führen Sie die Aktion manuell aus. Die Makroaufzeichnung übersetzt Ihre Aktionen in Visual Basic-Code. Es gibt aber einige Einschränkungen beim Aufzeichnen von Makros. Folgendes lässt sich nicht aufzeichnen:

  • Bedingte Verzweigungen

  • Variablenzuweisungen

  • Schleifenstrukturen

  • Benutzerdefinierte Formulare

  • Fehlerbehandlung

  • Textmarkierungen mit der Maus (Sie müssen Tastenkombinationen verwenden)

Zum Erweitern Ihrer Makros können Sie den Code, der in Ihrem Modul aufgezeichnet wurde, auch überarbeiten.

Entfernen der Selection-Eigenschaft

Makros, die über die Makroaufzeichnung erstellt wurden, sind von der Markierung abhängig. Am Anfang der meisten aufgezeichneten Makroanweisungen wird angezeigt Selection. Aufgezeichnete Makros verwenden die Selection-Eigenschaft , um das Selection-Objekt zurückzugeben. Im folgenden Beispiel wird die Markierung zur Textmarke "Temp" verschoben, und nach der Textmarke wird Text eingefügt.

Sub Macro1() 
    Selection.Goto What:=wdGotoBookmark, Name:="Temp" 
    Selection.MoveRight Unit:=wdCharacter, Count:=1 
    Selection.TypeText Text:="New text" 
End Sub

Dieses Makro führt die Aufgabe durch, es hat allerdings auch einige Nachteile. Erstens: Wenn im Dokument keine Textmarke "Temp" vorhanden ist, erzeugt das Makro einen Fehler. Zweitens: Das Makro verschiebt die Markierung, was unter Umständen nachteilig ist. Diese beiden Probleme können gelöst werden, indem das Makro so überarbeitet wird, dass es das Selection-Objekt nicht verwendet. So sieht das überarbeitete Makro aus:

Sub MyMacro() 
    If ActiveDocument.Bookmarks.Exists("Temp") = True Then 
        endloc = ActiveDocument.Bookmarks("Temp").End 
        ActiveDocument.Range(Start:=endloc, _ 
        End:=endloc).InsertAfter "New text" 
    End If 
End Sub

Die Exists-Methode wird verwendet, um zu überprüfen, ob das Lesezeichen mit dem Namen Temp vorhanden ist. Wenn das Lesezeichen gefunden wird, wird die Endzeichenposition des Lesezeichens mithilfe der End-Eigenschaft zurückgegeben. Schließlich wird die Range-Methode des Document-Objekts verwendet, um ein Range-Objekt zurückzugeben, das auf die Endposition des Lesezeichens verweist, sodass Text mithilfe der InsertAfter-Methode des Range-Objekts eingefügt werden kann. Weitere Informationen zum Definieren von Range-Objekten finden Sie unter Arbeiten mit Range-Objekten.

Verwenden von "With...End With"

Makro-Anweisungen, die sich auf dasselbe Objekt beziehen, können mit der Struktur With...End With vereinfacht werden. Beispielsweise wurde das folgende Makro aufgezeichnet, als am Beginn eines Dokuments ein Titel hinzugefügt wurde.

Sub Macro1() 
    Selection.HomeKey Unit:=wdStory 
    Selection.TypeText Text:="Title" 
    Selection.ParagraphAlignment.Alignment = wdAlignParagraphCenter 
End Sub

Die Selection-Eigenschaft wird bei jeder Anweisung zur Zurückgabe eines Selection-Objekts verwendet. Das Makro kann so vereinfacht werden, dass die Selection-Eigenschaft nur einmal verwendet wird.

Sub MyMacro() 
    With Selection 
        .HomeKey Unit:=wdStory 
        .TypeText Text:="Title" 
        .ParagraphAlignment.Alignment = wdAlignParagraphCenter 
    End With 
End Sub

Dieselbe Aufgabe kann auch ohne Verwendung des Selection-Objekts durchgeführt werden. Das folgende Makro verwendet zum Durchführen derselben Aufgabe ein Range-Objekt am Anfang des aktiven Dokuments.

Sub MyMacro() 
    With ActiveDocument.Range(Start:=0, End:=0) 
        .InsertAfter "Title" 
        .ParagraphFormat.Alignment = wdAlignParagraphCenter 
    End With 
End Sub

Entfernung überflüssiger Eigenschaften

Wenn Sie ein Makro aufzeichnen, bei dem in einem Dialogfeld eine Option ausgewählt wird, zeichnet die Makroaufzeichnung die Einstellungen aller Optionen im Dialogfeld auf, auch wenn Sie nur eine oder zwei der Optionen ändern. Wenn Sie nicht alle Optionen ändern müssen, können Sie die unnötigen Eigenschaften aus dem aufgezeichneten Makro entfernen. Das folgende aufgezeichnete Makro enthält eine Anzahl von Optionen des Dialogfelds Absatz im Menü Format.

Sub Macro1() 
    With Selection.ParagraphFormat 
        .LeftIndent = InchesToPoints(0) 
        .RightIndent = InchesToPoints(0) 
        .SpaceBefore = 6 
        .SpaceAfter = 6 
        .LineSpacingRule = 0 
        .Alignment = wdAlignParagraphLeft 
        .WidowControl = True 
        .KeepWithNext = False 
        .KeepTogether = False 
        .PageBreakBefore = False 
        .NoLineNumber = False 
        .Hyphenation = True 
        .FirstLineIndent = InchesToPoints(0) 
        .OutlineLevel = 10 
    End With 
End Sub

Wenn Sie jedoch nur den Leerraum vor und nach dem Absatz ändern möchten, können Sie das Makro folgendermaßen ändern:

Sub MyMacro() 
    With Selection.ParagraphFormat 
        .SpaceBefore = 6 
        .SpaceAfter = 6 
    End With 
End Sub

Das vereinfachte Makro wird schneller ausgeführt, da es weniger Eigenschaften festlegt. Nur der Abstand vor und nach dem Wird geändert; alle anderen Einstellungen für die ausgewählten Absätze bleiben unverändert.

Entfernen überflüssiger Argumente

Wenn die Makroaufzeichnung eine Methode aufzeichnet, werden die Werte aller Argumente aufgenommen. Das folgende Makro wurde beim Öffnen des Dokuments "Test.doc" aufgezeichnet. Das resultierende Makro enthält alle Argumente für die Open-Methode .

Sub Macro1() 
    Documents.Open FileName:="C:\My Documents\Test.doc", _ 
        ConfirmConversions:= False, ReadOnly:=False, _ 
        AddToRecentFiles:=False, PasswordDocument:="", _ 
        PasswordTemplate:="", Revert:=False, _ 
        WritePasswordDocument:="", _ 
        WritePasswordTemplate:="", Format:=wdOpenFormatAuto 
End Sub

Die nicht benötigten Argumente können aus dem aufgezeichneten Makro entfernt werden. Sie können z. B. alle Argumente entfernen, die auf eine leere Zeichenfolge festgelegt sind (z. B WritePasswordDocument:="". ), wie gezeigt.

Sub MyMacro() 
    Documents.Open FileName:="C:\My Documents\Test.doc", _ 
        ConfirmConversions:= False, _ 
        ReadOnly:=False, AddToRecentFiles:=False, _ 
        Revert:=False, Format:=wdOpenFormatAuto 
End Sub

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.