Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Über Excel VBA Word Dokument befüllen

Über Excel VBA Word Dokument befüllen
17.04.2020 12:29:46
Hans
Hallo zusammen,
folgendes Problem:
Mit einem Excel VBA möchte ich in einem Word Dokument Texte einfügen.
Da ganze funktioniert mit dem folgenden Makro auch soweit, leider nur mit der Einschränkung, dass ich Texte suchen muss, welche dann ersetzt werden.
Mein Ziel wäre es bestimmte Texte unter ein vorgegebenes Kapitel zu setzen. Sprich: Ich wähle _
das Kapitel, füge den Text ein OHNE, dass beispielsweise die Überschrift des Kapitel ersetzt _ werden.

Sub WordDokumentöffnen() 'ByVal Dokumente As String
Const wdReplaceAll = 2
Const wdNoProtection = -1
Dim oAppWD As Object, oDoc As Object
Dim Trennpunkt As Long
Dim Laenge As Long
Dim Unterschied As Long
Trennpunkt = InStr(1, ActiveWorkbook.Sheets("Eingabefenster").Range("B18").Value, " ")
Laenge = Len(ActiveWorkbook.Sheets("Eingabefenster").Range("B18").Value)
Unterschied = Laenge - Trennpunkt
If Dir("Dokumente")  "" Then
Set oAppWD = CreateObject("Word.Application") 'Word als Object starten
If Not oAppWD Is Nothing Then
oAppWD.Visible = True
If oAppWD.Options.AllowReadingMode = True Then 'Word nicht im Lesemodus starten bei  _
Schreibgeschützten Dokumenten
oAppWD.Options.AllowReadingMode = False
End If
Set oDoc = oAppWD.Documents.Open("Dokument")
Application.DisplayAlerts = False
If Not oDoc Is Nothing Then
If oDoc.ProtectionType  wdNoProtection Then oDoc.Unprotect
With oDoc.Range.Find
.Text = "Auftragsnr. xxx"
.MatchCase = True
.Replacement.Highlight = True
.Replacement.Text = "Auftragsnr. " & Left(ActiveWorkbook.Sheets("Eingabefenster") _
_
_
_
.Range("B18").Value, Trennpunkt)
.Execute Replace:=wdReplaceAll
End With
With oDoc.Range.Find
.Text = "Auftrag xxx"
.MatchCase = True
.Replacement.Highlight = True
.Replacement.Text = (ActiveWorkbook.Sheets("Variablen").Range("D2").Value)
.Execute Replace:=wdReplaceAll
End With
With oDoc.Range.Find
.Text = "XXX"
.MatchCase = True
.Replacement.Highlight = True
.Replacement.Text = "Dieser Text gilt nur als Test"
.Execute Replace:=wdReplaceAll
End With
oDoc.Save         'Dokument speichern
oDoc.Close        'Dokument schließen
oAppWD.Quit       'Word schließen
End If
End If
Else
MsgBox "Die zu öffnende Dokumentdatei wurde nicht gefunden!", vbCritical, "Word-Datei öffnen" _
_
_
_
End If
Set oAppWD = Nothing
Set oDoc = Nothing
End Sub

Ich danke euch für Hilfen!!
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Über Excel VBA Word Dokument befüllen
19.04.2020 13:14:25
fcs
Hallo Hans,
wenn du in deinem Wordtext in der Zeile unter den Kapitelüberschriften jeweils einen Suchtext (X_Kap_1X, X_Kap_2X, usw.) einträgst, dann kannst du dein Excel-Makro entsprechend erweitern.
Eine weitere Möglichkeit wäre im Worddocument Textmarken einzubauen und diese dann von Excel aus mit Daten zu füllen.
LG
Franz
Anzeige
AW: Über Excel VBA Word Dokument befüllen
20.04.2020 09:03:19
Hans
Hallo zusammen,
habe mittlerweile die Lösung gefunden.
Vielleicht hilft sie jemanden, der mal das gleiche Problem hat.
Sub WordDokumentöffnen()
Application.ScreenUpdating = False
Const wdReplaceAll = 2
Const wdNoProtection = -1
Dim oAppWD As Object, oDoc As Object
Dim x As Variant
Dim i As Variant
Dim Ueberschrift As String
If Dir("Dokumentenpfad")  "" Then
Set oAppWD = CreateObject("Word.Application") 'Word als Object starten
If Not oAppWD Is Nothing Then
oAppWD.Visible = True
If oAppWD.Options.AllowReadingMode = True Then 'Word nicht im Lesemodus starten bei  _
Schreibgeschützten Dokumenten
oAppWD.Options.AllowReadingMode = False
End If
Set oDoc = oAppWD.Documents.Open("Dokumentenpfad")
Application.DisplayAlerts = False
If Not oDoc Is Nothing Then
If oDoc.ProtectionType  wdNoProtection Then oDoc.Unprotect
x = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To x
With oAppWD.Selection.Find
.Forward = True
.ClearFormatting
.Style = ActiveWorkbook.Sheets("Worddokumente").Cells(i, 1).Value
.MatchWholeWord = True
.MatchCase = False
.Wrap = wdfindContinue
.Execute FindText:=ActiveWorkbook.Sheets("Worddokumente").Cells(i, 2).Value
End With
oAppWD.Selection.InsertParagraphAfter
oAppWD.Selection.InsertParagraphAfter
oAppWD.Selection.InsertAfter Text:=ActiveWorkbook.Sheets("Worddokumente").Cells(i, 3).  _
_
Value
Next
oDoc.Save         'Dokument speichern
oDoc.Close        'Dokument schließen
oAppWD.Quit       'Word schließen
End If
End If
Else
MsgBox "Die zu öffnende Dokumentdatei wurde nicht gefunden!", vbCritical, "Word-Datei öffnen" _
_
End If
Set oAppWD = Nothing
Set oDoc = Nothing
End Sub

Anzeige
AW: Über Excel VBA Word Dokument befüllen
20.04.2020 09:04:03
Hans
Danke dir Franz!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Word Dokument befüllen


Schritt-für-Schritt-Anleitung

Um mit einem Excel VBA Makro Texte in ein Word Dokument einzufügen, kannst du die folgenden Schritte befolgen:

  1. Öffne das VBA-Editor-Fenster:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (dein Dokument)“, wähle „Einfügen“ und dann „Modul“.
  3. Kopiere den folgenden VBA-Code:

    Sub WordDokumentöffnen()
       Application.ScreenUpdating = False
       Const wdReplaceAll = 2
       Const wdNoProtection = -1
       Dim oAppWD As Object, oDoc As Object
       Dim x As Variant
       Dim i As Variant
    
       If Dir("Dokumentenpfad") <> "" Then
           Set oAppWD = CreateObject("Word.Application") 'Word als Object starten
           oAppWD.Visible = True
           If oAppWD.Options.AllowReadingMode = True Then
               oAppWD.Options.AllowReadingMode = False
           End If
           Set oDoc = oAppWD.Documents.Open("Dokumentenpfad")
           Application.DisplayAlerts = False
           If Not oDoc Is Nothing Then
               If oDoc.ProtectionType <> wdNoProtection Then oDoc.Unprotect
               x = Cells(Rows.Count, 1).End(xlUp).Row
               For i = 2 To x
                   With oAppWD.Selection.Find
                       .Forward = True
                       .ClearFormatting
                       .MatchWholeWord = True
                       .MatchCase = False
                       .Wrap = wdFindContinue
                       .Execute FindText:=ActiveWorkbook.Sheets("Worddokumente").Cells(i, 2).Value
                   End With
                   oAppWD.Selection.InsertParagraphAfter
                   oAppWD.Selection.InsertParagraphAfter
                   oAppWD.Selection.InsertAfter Text:=ActiveWorkbook.Sheets("Worddokumente").Cells(i, 3).Value
               Next
               oDoc.Save
               oDoc.Close
               oAppWD.Quit
           End If
       Else
           MsgBox "Die zu öffnende Dokumentdatei wurde nicht gefunden!", vbCritical, "Word-Datei öffnen"
       End If
       Set oAppWD = Nothing
       Set oDoc = Nothing
    End Sub
  4. Ändere den „Dokumentenpfad“ zu dem tatsächlichen Pfad deiner Word-Datei.

  5. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle dein Makro aus und klicke auf „Ausführen“.

Häufige Fehler und Lösungen

  • Fehler: „Die zu öffnende Dokumentdatei wurde nicht gefunden!“

    • Lösung: Überprüfe den angegebenen „Dokumentenpfad“ und stelle sicher, dass die Datei existiert.
  • Fehler: Word startet im Lesemodus.

    • Lösung: Im Code ist bereits eine Option enthalten, um den Lesemodus zu deaktivieren. Stelle sicher, dass diese korrekt implementiert ist.

Alternative Methoden

  1. Textmarken verwenden: Statt nach Texten zu suchen, kannst du Textmarken in deinem Word-Dokument setzen und diese mit VBA füllen.

    • Beispiel: Füge in Word eine Textmarke mit dem Namen „Kapitel1“ ein. Mit folgendem Code kannst du sie füllen:
      oDoc.Bookmarks("Kapitel1").Range.Text = "Dein Text hier"
  2. Excel-Daten in Word einfügen: Anstatt ein Makro zu verwenden, kannst du auch Daten aus Excel direkt in Word einfügen, indem du die Funktion „Einfügen“ in Word nutzt und die Excel-Zellen kopierst.


Praktische Beispiele

  • Beispiel 1: Wenn du Kapitelüberschriften in Word hast, kannst du spezifische Texte direkt unter diesen Überschriften einfügen, indem du den Suchtext anpasst und den Code entsprechend erweiterst.

  • Beispiel 2: Du kannst mehrere Kapitel in Word haben und für jedes Kapitel den entsprechenden Text aus Excel einfügen. Verwende dazu eine Schleife, um durch die Kapitel zu iterieren.


Tipps für Profis

  • Nutze die „Debugging“-Funktionen von VBA, um Fehler im Code schnell zu finden.
  • Experimentiere mit dem Range-Objekt in Word, um komplexere Textformatierungen vorzunehmen.
  • Verwende Application.DisplayAlerts = False, um die Sicherheitswarnungen von Word zu unterdrücken, wenn du das Dokument speicherst.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass Word nicht im Lesemodus startet? Um sicherzustellen, dass Word nicht im Lesemodus startet, kannst du die Option AllowReadingMode im VBA-Code auf False setzen.

2. Kann ich Text aus mehreren Zellen gleichzeitig in Word einfügen? Ja, du kannst eine Schleife verwenden, um Texte aus mehreren Zellen in Word einzufügen. Achte darauf, die Logik im Makro entsprechend anzupassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige