Tutorial: Word-Vorlage mit Daten aus Excel befüllen

VBA und Makros
Codeschnipsel
Vorlage
Tabelle
Automatisierung
Schnittstelle
Schritt-für-Schritt
Excel
Word

Die Ausgangslage

Wer viele Briefe schreibt, kennt das ewige Eintragen von Adressen an die richtigen Positionen im Microsoft Word Dokument. Dieses Tutorial soll Ihnen Schritt für Schritt erklären, wie Sie sich eine eigene Word Vorlage erstellen, die beim Öffnen eine Eingabemaske anzeigt und anschließend die zur Auswahl passenden Informationen (z.B. Adressdaten) aus einer Excel Tabelle an die gewünschten Positionen im Word Dokument einfügt. In diesem Tutorial wird lediglich ein leichtes und stark vereinfachtes Beispiel verwendet und die ersten Schritte für Einsteiger und Anfänger erläutert. Daher ersetzt dieses Tutorial keine fundierte Schulung oder ein Seminar, sondern bietet lediglich den Service, um die ersten Schritte mit VBA und einer Eingabemaske und der Verbindung von Microsoft Word und Microsoft Excel auszuprobieren. Für Fortgeschrittene ist dieses Tutorial nicht geeignet! Sie können das Beispiel jedoch selbstständig verändern und beliebig ausbauen.

Hinweis: Für dieses Tutorial wurde Microsoft Office Professional Version 2013 verwendet. Als Betriebssystem wurde Windows 7 verwendet. Wenn Sie eine andere Version verwenden, kann es Unterschiede im Erscheinungsbild geben! Verwenden Sie Microsoft Office für Mac? Hier gibt es einige weitere Unterschiede, welche ich in diesem Tutorial aber nicht weiter ansprechen möchte.

Ich habe die unten folgenden Beispiele als fertige Dateien zum Download bereitgestellt. Sie finden die Download-Links am Ende dieses Tutorials.

Die Zielsetzung

Welche Funktionen möchten wir realisieren:

  • Beim Öffnen der Word Vorlage soll eine Eingabemaske erscheinen, welche alle Namen der Excel Adressliste anzeigt.
  • Beim Auswahl eines Namens auf der Eingabemaske sollen die dazu passenden Informationen aus der Adressliste (Excel) an definierte Textmarken im Word Dokument eingefügt werden.
In diesem Tutorial geht es lediglich um Grundlagenwissen. Komplizierte Eingabeprüfungen und Fehlerbehandlungsroutinen werde ich nicht ansprechen. Diese Themen sind jedoch weitere Ausbaumöglichkeiten, wären aber in einem ersten Schritt für Anfänger zu viel auf einmal.

Schauen wir uns die Ausgangslage an. Ich habe eine kleine Beispieltabelle erzeugt. Es ist wirklich ein sehr simples Beispiel. Wenn Sie dieses Beispiel nachbauen möchten, öffnen Sie nun Ihr Microsoft Excel und öffnen Sie eine neue und leere Arbeitsmappe. Erstellen Sie nun Ihre Adressliste auf dem Tabellenblatt Tabelle1.

  A B C D E
 1  Nr. Name Adresse PLZ und Ort           
 2  1 Marc Wershoven Meine Strasse 1 12345 Köln  
 3  2 Max Mustermann Musterallee 2 54321 Musterhausen  
 4  3 Berta Beispiel Beispielweg 3 22334 Beispielstadt  
 5  4 Petra Plural Pluralplatz 4 43215 Kleiner Ort  
 6           

Wichtige Annahme für dieses Beispiel: Wir gehen davon aus, das es jeden Namen, den wir eingeben, nur EINMAL gibt!

Sie können die Datei nun als MeineAdressen.xlsx abspeichern und anschließend Microsoft Excel vollständig schließen.

Die Word Vorlage erstellen und mit Textmarken versehen

Öffnen Sie Microsoft Word mit einem leeren Dokument.
Erstellen Sie Ihren Vorlagentext und fügen Sie die entsprechenden Textmarken ein. Das Endergebnis könnte z.B. so aussehen:

Abbildung 1 - Die Vorlagendatei mit Textmarken
Wenn Sie bisher noch nicht mit Textmarken / Textnamen gearbeitet haben, gehen Sie bitte wie folgt vor:
Markieren Sie die Stelle im Word Dokument, der Sie einen Textmarkennamen geben möchten. In unserem Beispiel habe ich an der Stelle, wo später der Name der Adresse eingefügt werden soll, den Text "Name" eingetragen. Diesen markieren Sie mit der Maus vollständig. Wechseln Sie im Menüband auf Einfügen - Textmarke. Es öffnet sich ein Fenster (siehe Screenshot). Geben Sie nun den gewünschten Namen für die Textmarke ein und klicken Sie auf "Hinzufügen", in unserem Beispiel heißt die Textmarke "Textmarke_Name". Das war es schon.

Bitte legen Sie die folgenden Textmarken in unserer Word Vorlage an:
  • Textmarke_Name
  • Textmarke_Adresse
  • Textmarke_PLZ_Ort
Damit haben wir den ersten Teil unserer Vorlage abgeschlossen. Der nächste Schritt ist die Eingabemaske.

Die Eingabemaske erstellen

Nachdem wir unsere Datengrundlage und die Vorlage vorbereitet haben, erstellen wir uns nun eine Eingabemaske. Zuerst entwerfen wir das Layout unserer Oberfläche, die auch als UserForm bezeichnet wird. Dazu drücken Sie in Word die Tastenkombination ALT und F11. Jetzt wird die integrierte Entwicklungsumgebung geöffnet.
Fügen Sie eine neue UserForm hinzu, welche den Namen UserForm1 bekommt. (Sollen Sie nicht wissen, wie Sie eine UserForm anlegen, gibt es in einem vorherigen Tutorial eine ausführliche Erklärung. Den Link zu diesem finden Sie hier.)

Wir benötigen auf unserer UserForm1 folgende Komponenten:

  • 1x ListBox (Name: ListBox1)
  • 1x CommandButton (Name: CommandButton_1 - Caption: Einfügen)
  • 1x CommandButton (Name: CommandButton_2 - Caption: Abbrechen)
  • 1x Label (Um die Oberfläche zu beschriften!)
Das Ergebnis könnte ungefähr so aussehen:
Abbildung 2 - Die Eingabemaske UserForm1
Hinweis zur Gestaltung: Wenn Sie ein Objekt, wie die TextBox oder den CommandButton, auf der UserForm1 anklicken, sehen Sie im Eigenschaftenfenster (dieses können Sie sich im Menü "Ansicht" zur Not einblenden lassen) ganz viele Einstellungsmöglichkeiten. Die Wichtigste für uns ist der "(Name)". Dieser muss wie oben in der Liste angegeben benannt sein (bspw. ListBox1, TextBox1, usw.), da sonst unsere Programmierung nicht funktionieren würde. Um einen Label-Text zu ändern oder die Schrift der Command_Buttons, können Sie die Eigenschaft Caption verwenden (im Eigenschaftenfenster) oder mit der Maus das Label markieren und mit einem erneuten Klick in den Editiermodus wechseln, dann sehen Sie den Cursor im Text blinken und können diesen nun verändern.

Damit haben wir unsere Oberfläche fertiggestellt. Sie können selbstverständlich Farben und Formen der Benutzeroberfläche beliebig an Ihre Bedürfnisse anpassen. Es folgt die eigentliche Programmierung.

Die Funktionalitäten der Eingabemaske erstellen

Um unserer Benutzeroberfläche "das Leben einzuhauchen", Doppel-Klicken Sie bitte auf die "Abbrechen"-Schaltfläche, unserem CommandButton_2 auf unserer UserForm1. Der Quellcode Editor wird geöffnet und Sie sehen schon etwas Quelltext. Löschen Sie diesen und fügen Sie den folgenden Quelltext vollständig ein.

Der Quelltext

Option Explicit
Option Compare Text
' Original-Quelltext unter: https://www.online-vba.de/vba-tutorial-vorlage-mit-werten-aus-excel-fuellen
' Express-Hilfe für VBA unter https://www.online-vba.de/vba-expresshilfe
' Es gelten die Nutzungsbedingungen von Online-VBA.de

'In dieser Konstanten speichern wir uns
'den Pfad und den Dateinamen der Adressliste (Excel)
'Bitte entsprechend anpassen!
Private Const sAdressDatei As String = _
    "C:\TEST\TutorialWordMitExcelFuellen\MeineAdressen.xlsx"

'Wie heisst das Tabellenblatt, auf welchem sich die Adressen befinden?
'Bitte entsprechend anpassen!
Private Const sTabellenblatt As String = "Tabelle1"

Private Sub CommandButton1_Click()
  Dim oExcelApp As Object
  Dim oExcelWorkbook As Object
  Dim lZeile As Long
    
    'Nur wenn ein Eintrag in der Liste markiert ist, wird das Makro ausgeführt
    If ListBox1.ListIndex >= 0 Then
        
        'Zuerst wird die Excel Datei geöffnet
        Set oExcelApp = CreateObject("Excel.Application")
        Set oExcelWorkbook = oExcelApp.Workbooks.Open(sAdressDatei)
        
        lZeile = 2 'Wir starten in Zeile 2, da in der ersten Zeile überschriften stehen
        With oExcelWorkbook.sheets(sTabellenblatt)
            Do While .Cells(lZeile, 1) <> ""
                'Wenn der Eintrag der Listbox mit dem Namen in der Adresstabelle
                'übereinstimmt, dann werden die Textmarken gefüllt!
                If ListBox1.Text = CStr(.Cells(lZeile, 2).Value) Then
                    'Eintrag gefunden, Textmarken füllen
                    ActiveDocument.Bookmarks("Textmarke_Name").Range.Text = _
                        CStr(.Cells(lZeile, 2).Value)
                    ActiveDocument.Bookmarks("Textmarke_Adresse").Range.Text = _
                        CStr(.Cells(lZeile, 3).Value)
                    ActiveDocument.Bookmarks("Textmarke_PLZ_Ort").Range.Text = _
                        CStr(.Cells(lZeile, 4).Value)
                    Exit Do
                End If
                lZeile = lZeile + 1
            Loop
        End With
        
        oExcelWorkbook.Close False
        oExcelApp.Quit
    
    Else
        MsgBox "Bitte wählen Sie einen Eintrag aus der Liste aus!", _
            vbInformation + vbOKOnly, "HINWEIS!"
        Exit Sub
    End If

  Set oExcelWorkbook = Nothing
  Set oExcelApp = Nothing
  Unload Me
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub

Private Sub UserForm_Initialize()
  Dim oExcelApp As Object
  Dim oExcelWorkbook As Object
  Dim lZeile As Long
    
    'Zuerst wird die Excel Datei geöffnet
    Set oExcelApp = CreateObject("Excel.Application")
    Set oExcelWorkbook = oExcelApp.Workbooks.Open(sAdressDatei)
    
    ListBox1.Clear
    lZeile = 2 'Wir starten in Zeile 2, da in der ersten Zeile überschriften stehen
    With oExcelWorkbook.sheets(sTabellenblatt)
        Do While .Cells(lZeile, 1) <> ""
            ListBox1.AddItem CStr(.Cells(lZeile, 2).Value)
            lZeile = lZeile + 1
        Loop
    End With
    
    oExcelWorkbook.Close False
    oExcelApp.Quit
    
  Set oExcelWorkbook = Nothing
  Set oExcelApp = Nothing
End Sub



So einfach läuft unsere VBA-Expresshilfe ab

1
Senden Sie uns Ihre Office-Datei oder Ihren VBA-Code (gerne anonymisiert) mit einer kurzen Problembeschreibung oder Ihrem Erweiterungswunsch per E-Mail.
2
Wir analysieren Ihr Anliegen schnell und schicken Ihnen umgehend (tagsüber meist innerhalb von 1-2 Stunden) ein Festpreis-Angebot.
3
Nach Ihrer Zustimmung lösen wir Ihr Problem (meist noch am gleichen Tag) oder setzen Ihre Erweiterung zuverlässig um – inklusive verständlicher Dokumentation der durchgeführten Maßnahmen.

Erläuterungen zum Quelltext

Eine manuelle Änderung müssen Sie am eingefügten Quelltext noch vornehmen. Ziemlich am Anfang finden Sie die Zeilen:

Private Const sAdressDatei As String = _
    "C:\TEST\TutorialWordMitExcelFuellen\MeineAdressen.xlsx"

Bitte passen Sie den entsprechenden Pfad so an, dass das Makro auch die Adressdatei auf Ihrem Rechner finden kann!

Da wir Applikations übergreifend arbeiten möchten, benötigen wir noch zusätzliche Befehle. Nämlich die aus Microsoft Excel. Da ich in diesem Beispiel mit dem sogenannten "Late-Binding" arbeite, benötigen wir diesen Verweis nicht zwingend! Der Vollständigkeit halber erwähne ich diesen Schritt trotzdem!
Dazu gehen Sie in der Entwicklungsumgebung im Menü auf Extras - Verweise. Es wird Ihnen ein Fenster geöffnet. Suchen Sie dort nach der Bibliothek "Microsoft Excel xx.0 Object Library". Ersetzen Sie das xx entsprechend Ihrer verwendeten Version. Als Beispiel: Bei Microsoft Excel Version 2013 steht dort 15.0. Setzen Sie das Häkchen um die Bibliothek verwenden zu können und bestätigen Sie Ihre Eingabe mit "OK".
Abbildung 3 - Verweise einstellen...
Als nächsten Schritt Doppel-Klicken Sie im Projekt-Explorer (links) auf den Eintrag "ThisDocument" und fügen Sie im Quelltextfenster folgenden Quelltext ein:

Option Explicit
' Original-Quelltext unter: https://www.online-vba.de/vba-tutorial-vorlage-mit-werten-aus-excel-fuellen
' Express-Hilfe für VBA unter https://www.online-vba.de/vba-expresshilfe
' Es gelten die Nutzungsbedingungen von Online-VBA.de

Private Sub Document_New()
    UserForm1.Show
End Sub

Dieser Quelltext bewirkt, dass bei Erstellung eines neuen Dokumentes anhand unserer Vorlage, die UserForm geöffnet wird!

Das war es schon! Wie die Programmierung funktioniert, habe ich Ihnen in grüner Schrift in den Quelltext geschrieben.

Speichern Sie die Datei nun als Word Vorlage mit Makros (Dateiname: MeineVorlage.dotm) und schließen Sie Word anschließend.

Jetzt testen wir!

Nun ist es soweit! Wir probieren das Ganze aus.
Doppel-Klicken Sie im Windows-Explorer auf unsere Word-Vorlagendatei MeineVorlage.dotm. Es öffnet sich direkt anschließend unsere Eingabemaske:

Abbildung 4 - Testergebnisse, so sollte es aussehen!

Schlusswort

Ich hoffe, ich konnte Ihnen an diesem einfachen Beispiel die ersten Schritte zur Verbindung von Excel und Word näherbringen. Selbstverständlich gibt es noch viele weitere Möglichkeiten, Erweiterungen und Verschönerungen, die man einbauen kann. Wie sagt man so schön: "Man kann immer mehr dazu bauen und hübscher geht auch immer!". Diese Aufgabe überlasse ich allerdings Ihnen selbst!

Ich wünsche Ihnen Viel Erfolg und Spass bei der Umsetzung!

Download der Beispieldatei

Zu guter Letzt habe ich Ihnen die in diesem Tutorial als Beispiel verwendeten Dateien als Download bereitgestellt.

Die beiden Links dazu finden Sie hier:

1) Die Adressliste (Excel)

DOWNLOAD

Dateiformat: *.xlsx • Erstellt mit Microsoft Excel Version 2013 • Diese Datei ist kompatibel mit Microsoft Excel Version 2007 oder neuer • Dateigröße: ca. 9 KiloBytes

2) Die Vorlagendatei (Word)

DOWNLOAD
Dateiformat: *.dotm • Erstellt mit Microsoft Word Version 2013 • Diese Datei ist kompatibel mit Microsoft Word Version 2007 oder neuer • Dateigröße: ca. 22 KiloBytes

Anmerkungen und Hinweise

Dieser Codeschnipsel wurde geschrieben von Marc Wershoven im Jahr 2014.
Die Nutzung erfolgt auf eigene Gefahr. Bitte denken Sie immer zuerst an eine ausreichende Datensicherung. Wir können keinen kostenlosen Support anbieten. Es gelten unsere Nutzungs­bedingungen.

Wichtiger Hinweis für Downloads: Als kostenlosen Service stellen die Autoren von Online-VBA.de Dateien zum Download bereit. Dieser Download erfolgt stets auf eigene Gefahr. Bitte beachten Sie die Nutzungsbedingungen, bevor Sie die Datei herunterladen. Einen kostenlosen Support oder Service für die hier veröffentlichen Werke kann leider nicht angeboten werden!


So einfach läuft unsere VBA-Expresshilfe ab

1
Senden Sie uns Ihre Office-Datei oder Ihren VBA-Code (gerne anonymisiert) mit einer kurzen Problembeschreibung oder Ihrem Erweiterungswunsch per E-Mail.
2
Wir analysieren Ihr Anliegen schnell und schicken Ihnen umgehend (tagsüber meist innerhalb von 1-2 Stunden) ein Festpreis-Angebot.
3
Nach Ihrer Zustimmung lösen wir Ihr Problem (meist noch am gleichen Tag) oder setzen Ihre Erweiterung zuverlässig um – inklusive verständlicher Dokumentation der durchgeführten Maßnahmen.

Jetzt kontaktieren!







Mit einem * gekennzeichnete Eingabefelder sind Pflichtfelder.
Datenschutzhinweise zum Kontaktformular: Die von Ihnen im Kontaktformular bereitgestellten Daten werden ausschließlich zur Bearbeitung Ihrer Anfrage verwendet und nicht ohne Ihre Zustimmung an Dritte weitergegeben. Ihre Daten werden nur für den Zeitraum gespeichert, der zur Bearbeitung Ihrer Anfrage erforderlich ist. Weitere Hinweise zum Datenschutz finden Sie in unserer Datenschutzerklärung.
Hinweis: Für die vollständige Funktion dieser Website ist JavaScript erforderlich.
Bitte aktivieren Sie JavaScript in Ihrem Browser, um alle Inhalte und interaktiven Funktionen nutzen zu können.