Word Macro Beispiele & VBA Tutorial
In this Article
Willkommen zu unserem Word VBA / Makros Mega-Guide!
Diese Seite enthält:
- Word VBA Tutorial PDF (kostenloser Download)
- Word VBA „Cheat Sheet“ mit einer Liste der am häufigsten verwendeten Word VBA Code-Snippets
- Vollständiges Word VBA / Makro-Tutorial.
- Durchsuchbare Liste aller Word VBA Makro-Tutorials
Sie könnten auch an unserem interaktiven VBA-Tutorial für Excel interessiert sein. Während einige der Beispiele/Übungen speziell auf Excel VBA zugeschnitten sind, ist ein Großteil des Inhalts allgemein für alle VBA-Programme gültig. Sie können damit Konzepte wie If-Anweisungen, Schleifen, MessageBoxes und mehr erlernen.
VBA PDF (kostenlose Downloads)
Laden Sie unser kostenloses Microsoft Word VBA-Tutorial herunter! Oder VBA-Tutorials für andere Office-Programme!
Word VBA Beispiele „CheatSheet“
Nachfolgend finden Sie einfache VBA-Code-Beispiele für die Arbeit mit Microsoft Word.
Auswählen / Gehe zu
Selection.Extend
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Lesezeichen
.Add Range:=Selection.Range, Name:=“Name“
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
n = ActiveDocument.Bookmarks.Count
‚Do something
End If
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.InsertAfter „New Text“
ActiveDocument.Bookmarks.Add Range:=Selection.Range, _
Name:=“BookmarkName“
Dokument
Set doc = Documents.Add
NewTemplate:=False
Spalten
Beschreibung
VBA-Code
Speichern unter
Documents(„Beispiel.doc“).SaveAs („C:\Beispiel\Beispiel.doc“)
Speichern
Dokumente(„Beispiel.doc“).Speichern
Schützen
Documents(„Beispiel.doc“).Protect Passwort:=“Passwort“
Aufheben des Schutzes
Documents(„Beispiel.doc“).UnProtect Passwort:=“Passwort“
Anzahl der Seiten
Dim varNumberPages as Variant
varAnzahlSeiten = _
ActiveDocument.Content.Information(wdActiveEndAdjustedPageNumber)
Drucken
Documents(„Beispiel.doc“).Print
Schriftart
Einfügen
Selection.Range.InsertAutoText
Schleifen
‚Do Something
Sub
ForEach doc In Documents
‚Do Something
Next doc
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori = 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i
Absatz
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
End With
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori = 1 To iParCount
ActiveDocument.Paragraphs(i).Alignment = wdAlignParagraphLeft
Next i
Word VBA Makro Tutorial
Dies ist ein Tutorial für die Verwendung von VBA mit Microsoft Word. In diesem Tutorial lernen Sie, wie Sie ein einfaches Makro schreiben und mit Dokumenten, Bereichen, Auswahlen und Absätzen interagieren.
Hinweis: Wenn Sie ganz neu im Bereich Makros/VBA sind, finden Sie vielleicht auch diesen Artikel nützlich: Wie man VBA-Makros von Grund auf schreibt.
VBA ist die Programmiersprache, mit der Microsoft Office-Programme wie Word, Excel, Outlook, PowerPoint und Access automatisiert werden.
Makros sind Blöcke von VBA-Code, die bestimmte Aufgaben ausführen.
Wenn Sie ein Makro aufzeichnen, schreibt Word VBA-Code in ein Makro, so dass Sie Ihre Aktionen wiederholen können. Eine Liste aller verfügbaren Makros finden Sie unter Ansicht > Makros.
Nach der Makro-Aufzeichnung können Sie das Makro in der Makroliste bearbeiten:
Wenn Sie auf Bearbeiten klicken, öffnen Sie den VBA-Editor. Mit dem VBA-Editor können Sie aufgezeichnete Makros bearbeiten oder ein Word-Makro von Grund auf neu schreiben. Um den VBA-Editor aufzurufen, verwenden Sie die Tastenkombination ALT + F11 oder klicken Sie in der Multifunktionsleiste unter Entwicklertools auf Visual Basic.
Einfaches Word-Makro-Beispiel
Dies ist ein einfaches Beispiel für ein Word-VBA-Makro. Es führt die folgenden Aufgaben aus:
- ein Word-Dokument öffnen,
- in das Dokument schreiben,
- Word-Dokument speichern und schließen.
Sub WordMakroBeispiel()
'Doc öffnen & einer Variablen zuweisen
Dim oDoc As Document
Set oDoc = Documents.Open("c:\Users\someone\NewDocument.docx")
'In Doc schreiben
Selection.TypeText "www.automateexcel.com"
Selection.TypeParagraph
'Doc speichern und schließen
oDoc.Save
oDoc.Close
End Sub
Word Makro Grundlagen
Der gesamte VBA-Code muss in Prozeduren wie dieser gespeichert werden. Um eine Prozedur in VBA zu erstellen, geben Sie „Sub WordMakroBeispiel“ ein (wobei „WordMakroBeispiel“ ein beliebig zu vergebener Makroname ist) und drücken Sie ENTER. VBA fügt automatisch die Klammern und End Sub hinzu.
Word-Dokument-Objekt
Wenn Sie in VBA mit Microsoft Word interagieren, werden Sie häufig auf Word-„Objekte“ verweisen. Die am häufigsten verwendeten Objekte sind:
Application Objekt – Microsoft Word selbst
Document Objekt – Ein Word-Dokument
Range Objekt – Ein Teil eines Word-Dokuments
Selection Objekt – Ein ausgewählter Bereich oder eine Cursorposition.
Anwendung (Application)
Application ist das „Top-Level“-Objekt. Alle anderen Objekte in Word können über sie erreicht werden.
Zusätzlich zum Zugriff auf andere Word-Objekte gibt es Einstellungen auf „Anwendungsebene“, die angewendet werden können:
Application.Options.AllowDragAndDrop = True
Dies ist ein Beispiel für den Zugriff auf die „Auswahl“ von „Windows(1)“ mit in der Anwendung:
Application.Windows(1).Selection.Characters.Count
Auf die gängigsten Word-Objekte kann jedoch direkt zugegriffen werden, ohne dass die gesamte Hierarchie eingegeben werden muss. Sie können (und sollten) also stattdessen einfach eingeben:
Selection.Characters.Count
Dokumente
ActiveDocument
Oft haben Sie zwei oder mehr Dokumente in Word geöffnet und müssen angeben, mit welchem Word-Dokument Sie interagieren möchten. Eine Möglichkeit, das Dokument anzugeben, ist die Verwendung von ActiveDocument. Zum Beispiel:
ActiveDocument.PrintOut
…würde das ActiveDocument drucken. Das ActiveDocument ist das Dokument in Word, das sich im „Fokus“ habefindet.
Um das ActiveDocument zu wechseln, verwenden Sie den Befehl Activate:
Documents("Beispiel.docx").Activate
ThisDocument
Anstatt ActiveDocument zu verwenden, um auf das aktive Dokument zu verweisen, können Sie ThisDocument verwenden, um auf das Dokument zu verweisen, in dem das Makro gespeichert ist. ThisDocument wird sich während der Makro-Laufzeit nie ändern.
ThisDocument.PrintOut
Dokument-Variablen
Bei komplizierteren Makros kann es jedoch schwierig sein, den Überblick über das aktive Dokument zu behalten. Es kann auch frustrierend sein, zwischen den Dokumenten hin und her zu wechseln.
Stattdessen können Sie Variablen für ihre Dokumente verwenden.
Dieses Makro weist das ActiveDocument einer Variablen zu und druckt dann das Dokument unter Verwendung der Variablen:
Sub VarExample()
Dim oDoc As Document
Set oDoc = ActiveDocument
oDoc.PrintOut
End Sub
Dokument-Methoden
Dokument öffnen
So öffnen Sie ein Word-Dokument:
Documents.Open "c:\Users\Jemand\Desktop\Test PM.docx"
Wir empfehlen, ein Dokument beim Öffnen immer einer Variablen zuzuweisen:
Dim oDoc as Document
Set oDoc = Documents.Open("c:\Users\Jemand\Desktop\Test PM.docx")
Neues Dokument erstellen
So erstellen Sie ein neues Word-Dokument:
Documents.Add
Wir können Word anweisen, ein neues Dokument auf der Grundlage einer Vorlage zu erstellen:
Documents.Add Template:="C:\Programme\Microsoft Office\Templates\MyTemplate.dotx"
Wie immer ist es nützlich und spart große Probleme, das Dokument beim Erstellen oder Öffnen einer Variablen zuzuweisen:
Dim oDoc as Document
Set oDoc = Documents.Add (Template:="C:\Programme\Microsoft Office\Templates\MeineVorlage.dotx")
Dokument speichern
Um ein Dokument zu speichern:
ActiveDocument.Save
oder SaveAs:
ActiveDocument.SaveAs FileName:= c:\Users\SomeOne\Desktop\test2.docx", FileFormat:=wdFormatDocument
Dokument schließen
So schließen Sie ein Dokument und speichern die Änderungen:
ActiveDocument.Close wdSaveChanges
oder ohne Speichern der Änderungen:
ActiveDocument.Close wdDoNotSaveChanges
Dokument drucken
Das aktive Dokument wird gedruckt:
ActiveDocument.PrintOut
Range, Selection, Paragraphs
Range und Selection sind wahrscheinlich die wichtigsten Objekte in Word VBA, zumindest die am häufigsten verwendeten.
Range bezieht sich auf einen Teil des Dokuments. Normalerweise aber nicht zwingend bezieht sich die Range auf einen Text.
Selection bezieht sich auf ausgewählten Text (oder andere Objekte wie Bilder) oder, wenn nichts ausgewählt ist, auf eine Einfügemarke.
Paragraphs stehen für Absätze im Dokument. Es ist weniger wichtig, als es klingt, weil man nicht direkt auf den Text eines Absatzes zugreifen kann (man muss auf einen bestimmten Absatzbereich zugreifen, um Änderungen vorzunehmen).
Range
Ein Bereich kann ein beliebiger Teil des Dokuments sein, einschließlich des gesamten Dokuments:
Dim oRange As Range
Set oRange = ActiveDocument.Content
oder es kann auch nur ein einziges Zeichen sein.
Ein anderes Beispiel: Dieser Bereich würde sich auf das erste Wort im Dokument beziehen:
Dim oRange As Range
Set oRange = ActiveDocument.Range.Words(1)
Normalerweise möchten Sie einen Bereich abrufen, der sich auf einen bestimmten Teil des Dokuments bezieht, und ihn dann ändern.
Im folgenden Beispiel wollen wir das erste Wort des zweiten Absatzes fett machen:
Dim oRange As Range
Set oRange = ActiveDocument.Paragraphs(2).Range.Words(1)
oRange.Bold = True
Set Range Text
So setzen Sie den Textwert eines Bereichs:
Dim oRange As Range
Set oRange = ActiveDocument.Paragraphs(2).Range.Words(1)
oRange.Text = "Hallo "
(Tipp: Beachten Sie das Leerzeichen nach „Hallo“. Ohne dem Leerzeichen würde das nachfolgende Wort ohne Leerzeichen angefügt werden, z.B. „Hallonächstes Wort“)
Es gibt Hunderte von Dingen, die Sie mit Range-Objekten tun können. Nur ein paar Beispiele (diese gehen von einer bereits erstellten Objektvariable oRange aus, die auf den gewünschten Bereich verweist):
Schriftart ändern
oRange.Font.Name = "Arial"
Anzeige der Zeichenanzahl eines bestimmten Bereiches in einer Messagebox
MsgBox oRange.Characters.Count
Einen Text davor einfügen
oRange.InsertBefore "dies ist eingefügter Text"
Eine Fußnote in den Bereich einfügen
ActiveDocument.Footnotes.Add Range:=oRange, _
Text:="Lesen Sie mehr unter automateexcel.com."
In die Zwischenablage kopieren
oRange.Copy
Oft müssen Sie ändern, worauf sich ein bestimmter Bereich bezieht. So können Sie den Anfang und das Ende des Bereichs festlegen
oBereich.Start = 5
oRange.End = 50
Nach obigem Code würde sich oRange auf den Text beziehen, der mit dem fünften Zeichen beginnt und mit dem 50sten Zeichen im Dokument endet.
Auswahl
Das Selection-Objekt ist sogar noch weiter verbreitet als der Bereich, da sich mit ihnen einfacher als mit Bereichen arbeiten lässt, unter der Bedingung, dass ihr Makro AUSNAHMSLOS mit dem ActiveDocument arbeitet.
Wählen Sie zunächst den gewünschten Teil Ihres Dokuments aus. Wählen Sie zum Beispiel den zweiten Absatz im aktiven Dokument aus:
ActiveDocument.Paragraphs(2).Range.Select
Dann können Sie das Selection-Objekt verwenden, um einen Text einzugeben:
Selection.TypeText "Irgendein Text"
Wir können einige Absätze unterhalb von „Irgendein Text“ eingeben:
Selection.TypeText "Irgendein Text"
Selection.TypeParagraph
Oft ist es notwendig zu wissen, ob ein Text ausgewählt ist oder ob wir nur eine Einfügemarke haben:
If Selection.Type <> wdSelectionIP Then
Selection.Font.Bold = True
Else
MsgBox "Sie müssen einen Text auswählen."
End If
Wenn wir mit dem Selection-Objekt arbeiten, wollen wir die Einfügemarke an einer bestimmten Stelle platzieren und Befehle von dieser Stelle aus geben.
Anfang des Dokuments:
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
Beginn der aktuellen Zeile:
Selection.HomeKey Unit:=wdLine, Extend:=wdMove
Der Extend-Parameter wdMove verschiebt die Einfügemarke. Stattdessen können Sie auch wdExtend verwenden, um den gesamten Text zwischen der aktuellen Einfügemarke auszuwählen.
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Auswahl verschieben
Die nützlichste Methode zum Ändern der Position der Einfügemarke ist Verschieben. So verschieben Sie ihre Auswahl um zwei Zeichen weiter:
Selection.Move Unit:=wdCharacter, Count:=2
um sie zurück zu bewegen, verwenden Sie eine negative Zahl für den Parameter Count:
Selection.Move Unit:=wdZeichen, Count:=-2
Der Unit-Parameter kann wdCharacter, wdWord, wdLine oder andere sein (siehe Word VBA-Hilfe für weitere Parameter).
Um stattdessen Wörter zu verschieben:
Selection.Move Unit:=wdWord, Count:=2
Die Auswahl ist einfacher zu handhaben (im Vergleich zu Bereichen), da sie wie ein Roboter mit Word arbeitet und den menschlichen Benutzer nachahmt. Wo die Einfügemarke ist, findet eine Aktion statt. Das bedeutet aber, dass Sie darauf achten müssen, wo sich die Einfügemarke befindet! Das ist nach vielen Schritten im Code nicht einfach. Sonst würde Word den Text an einer ungewünschten Stelle ändern.
Für den Fall, dass Sie eine Eigenschaft oder Methode benötigen, die im Selection-Objekt nicht verfügbar ist, können Sie immer auf den der Auswahl zugehörigen Bereich zurück greifen:
Set oRange = Selection.Range
TIPP: Die Verwendung von Selection ist oft einfacher als die Verwendung von Ranges, aber auch viel langsamer (wichtig, wenn Sie mit großen Dokumenten arbeiten).
Absätze
Sie können das Paragraphs-Objekt nicht direkt verwenden, um Text zu ändern:
ActiveDocument.Paragraphs(1).Text = "Nein, das würde nicht funktionieren"
Das obige Beispiel würde nicht funktionieren (es würde sogar einen Fehler auswerfen). Sie müssen zuerst den mit einem bestimmten Absatz verbundenen Bereich abrufen:
ActiveDocument.Paragraphs(1).Range.Text = "Es funktioniert jetzt :)"
Sie können aber auch direkt den Stil ändern:
ActiveDocument.Paragraphs(1).Style = "Normal"
oder seine Formatierung auf Absatzebene ändern:
ActiveDocument.Paragraphs(1).LeftIndent = 10
oder vielleicht möchten Sie diesen Absatz auf derselben Zeile wie den nächsten Absatz halten, also ohne Trennung per Zeilenumbruch:
ActiveDocument.Paragraphs(1).KeepWithNext = True
Absatz zentriert machen:
ActiveDocument.Paragraphs(1).Alignment = wdAlignParagraphCenter
Es ist SEHR nützlich, einen bestimmten Absatz einer Objektvariablen zuzuweisen. Wenn wir einen bestimmten Absatz einer Variablen zuweisen, müssen wir uns keine Sorgen darüber machen, dass der erste Absatz zum zweiten wird, weil wir einen Absatz davor eingefügt haben:
dim oPara as Paragraph
Set oPara = Selection.Paragraphs(1) 'hier weisen wir den ersten Absatz der aktuellen Auswahl einer Variablen zu
Hier ist ein Beispiel, in dem wir einen Absatz über dem ersten Absatz einfügen, aber wir können immer noch auf den alten ersten Absatz verweisen, weil er einer Variablen zugewiesen wurde:
Sub AbsatzBeispiel()
Dim oPara As Paragraph
Set oPara = ActiveDocument.Paragraphs(1)
MsgBox oPara.Range.Text
oPara.Range.InsertParagraphBefore 'Absatz einfügen
MsgBox oPara.Range.Text
End Sub
Das Paragraph-Objekt wird sehr häufig in Schleifen verwendet:
Sub SchleifeDurchAbsaetze()
Dim oPara As Paragraph
For Each oPara In ActiveDocument.Paragraphs
'etwas damit machen. Wir werden Absatztext nur anzeigen
'wenn sein Stil "Heading 4" ist
If oPara.Style = "Heading 4" Then
MsgBox oPara.Range.Text
End If
Next oPara
End Sub
Word VBA-Tutorial Schlussfolgerung
In diesem Tutorial wurden die Grundlagen von Word VBA behandelt. Wenn Sie neu in VBA sind, sollten Sie auch unser allgemeines VBA-Tutorial lesen, um mehr über Variablen, Schleifen, MessageBoxen, Einstellungen, bedingte Logik und vieles mehr zu erfahren.
Word Makro Beispiele
Word Macro Examples |
---|
SaveAs PDF |
Find and Find and Replace |
Open Documents |
Word VBA-FAQs
Was ist ein Word-Makro?
Ein Makro ist ein allgemeiner Begriff, der sich auf eine Reihe von Programmieranweisungen zur Automatisierung von Aufgaben bezieht. Word-Makros automatisieren Aufgaben in Word unter Verwendung der Programmiersprache VBA.
Verfügt Word über VBA?
Ja, Microsoft Word verfügt über den VBA-Editor. Er kann mit der Tastenkombination ALT + F11 aufgerufen werden oder indem man zu Entwicklertools > Visual Basic navigiert.
Wie verwende ich VBA in Word?
1. Öffnen Sie den VBA-Editor (ALT + F11 oder Entwicklertools > Visual Basic)
2. Gehen Sie zu Einfügen > Modul, um ein Code-Modul zu erstellen.
3. Geben Sie ‚Sub HelloWorld‘ ein und drücken Sie Enter
4. Geben Sie zwischen den Zeilen ‚Sub HelloWorld‘ und ‚End Sub‘ ‚MsgBox „Hello World!
5. Sie haben ein Makro erstellt!
6. Drücken Sie nun ‚F5‘, um das Makro auszuführen