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

Forumthread: mittels VBA Inhalte aus Word kopieren und einfügen

mittels VBA Inhalte aus Word kopieren und einfügen
28.09.2018 12:12:16
Steffi
Hallo zusammen,
Eure Forum hat mir schon sehr häufig bei meinen VBA Problemen geholfen, aber jetzt bin ich auf ein Problem gestoßen, dass ich selbst nicht lösen kann und auf eure Hilfe setze.
Ich habe in Excel ein makro geschrieben, dass mir eine Wordvorlage öffnet, Felder automatisch aus Excel füllt und das Word dann speichert unter neuem Namen.
Soweit funktioniert es.
Nun möchte ich aber in diesem Makro eigentlich gerne haben, dass alle Tabellen in Word in einem Dokument untereinander stehen. Also eigentlich folgende Schritte:
Wordvorlage öffnen
Word automatisch füllen aus Excel
Inhalt dieses Worddokuments kopieren
In neues Work Dokument einfügen (zusa.doc)
Erstes Worddokument speichern.
Neues Workdokument öffnen
Inhalt wieder automatisch füllen aus Excel
Inhalt kopieren und in zusa.doc kopieren.
Bei den Punkte mit Kopieren und zusammenfügen scheitere.
Kann mir jemand helfen?
Hier mein Code:

Sub AlleSchnipselerzeugen()
Dim i As Integer
Dim letztezeile As Integer
'Pfad = Cells(1, 1) 'entweder in A1 den Pfad eingeben oder diese Zeile auskommentieren...
Pfad = "C:\temp\Schnipsel.docx" '...und hier den Pfad eingeben
letztezeile = InputBox("was ist die letzte Zeile mit RedmineNummer?")
Set wdAnw = CreateObject("Word.Application") 'Word-Instanz erzeugen
Set wdDokzusa = wdAnw.documents.Add
wdDokzusa.SaveAs ThisWorkbook.Path & "\" & "zusa" & ".doc"
For i = 2 To letztezeile
On Error Resume Next
Set wdAnw = GetObject(, "Word.Application") 'Bestehende Word-Instanz suchen
Select Case Err.Number
Case 0 'Alles paletti
Case 429 'Es gibt soweit keine Word-Instanz
Err.Clear
Set wdAnw = CreateObject("Word.Application") 'Word-Instanz erzeugen
If Err.Number > 0 Then
BadOrHappyEnd Err.Number, Err.Description
Exit Sub
End If
Case Else 'Unerwarteter Fehler
BadOrHappyEnd Err.Number, Err.Description
Exit Sub
End Select
On Error GoTo 0
wdAnw.Visible = True 'Instanz sichtbar machen
wdAnw.WindowState = 0
'Je nach dem, ob das Dokument bereits geöffnet ist oder nicht wird verbunden
'bzw. geöffnet. Diese Differenzierung geschieht implizit.
On Error Resume Next
'Set wdDok = wdAnw.Documents.Open(Filename:=Pfad)
Set wdDok = wdAnw.documents.Add(Template:=Pfad)
If Err.Number > 0 Then 'Wenn Arbeitsmappe nicht existiert oder unerwarteter Fehler
BadOrHappyEnd Err.Number, Err.Description
Exit Sub
End If
On Error GoTo 0
'hier kommt das eigentliche Eintragen
wdAnw.activeDocument.FormFields.Item("Redmine").Result = Cells(i, 11)
wdAnw.activeDocument.FormFields.Item("Status").Result = Cells(i, 10)
wdAnw.activeDocument.FormFields.Item("Konfiguration").Result = Cells(i, 7)
wdAnw.activeDocument.FormFields.Item("Tester").Result = Cells(i, 6)
wdAnw.activeDocument.FormFields.Item("Ort").Result = Cells(i, 5)
wdAnw.activeDocument.FormFields.Item("Datum").Result = Cells(i, 4)
wdAnw.activeDocument.FormFields.Item("Auswahl").Result = Cells(i, 8)
'**************Hier meine Versuche des kopierens und zusammenfügen, wobei ich kläglich  _
gescheitert bin*******************************************************
' wdAnw.activeDocument.Select
wdAnw.Selection.wholeStory
Selection.Copy
'Selection.wholeStory
'Selection.Copy
'  Selection.PasteAndFormat (wdFormatOriginalFormatting)
wdAnw.activeDocument.Content.Insert
'wdAnw.activeDocument.Copy
'wddokuzusa.activeDocument.Paste
' ****************ENDE der VERSUCHE***************************
wdAnw.activeDocument.SaveAs ThisWorkbook.Path & "\" & Cells(i, 11).Value & ".doc"
wdAnw.activeDocument.Close
Next i
BadOrHappyEnd Err.Number, Err.Description
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mittels VBA Inhalte aus Word kopieren und einfügen
30.09.2018 19:57:51
Dieter
Hallo Steffi,
wenn ich dein Problem richtig verstanden habe, dann könnte das etwa so aussehen.
Da du relativ viel Word-Programmierung verwendest, habe ich lieber mit einem Verweis auf die Word-Bibliothek gearbeitet.
Sub AlleSchnipselerzeugen()
Dim i As Long
Dim letzteZeile As Long
Dim Pfad As String
Dim wdAnw As Word.Application
Dim wdDok As Word.Document
Dim wdDokzusa As Word.Document
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
Pfad = "C:\Temp\Schnipsel.docx" '...und hier den Pfad eingeben
letzteZeile = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
If letzteZeile 
Viele Grüße
Dieter
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Inhalte aus Word mittels VBA kopieren und einfügen


Schritt-für-Schritt-Anleitung

  1. Word-Vorlage öffnen: Stelle sicher, dass Du eine Word-Vorlage hast, die Du verwenden möchtest. Der Pfad sollte im Code wie folgt definiert werden:

    Pfad = "C:\Temp\Schnipsel.docx"
  2. Word-Anwendung instanziieren: Erstelle eine Instanz von Word, um die VBA-Funktionen nutzen zu können.

    Set wdAnw = CreateObject("Word.Application")
  3. Dokumente erstellen und befüllen: Fülle die Word-Dokumente mit Daten aus Excel. Hierbei kannst Du die FormFields nutzen, um die entsprechenden Daten einzufügen.

    wdAnw.activeDocument.FormFields.Item("Redmine").Result = Cells(i, 11)
  4. Inhalt kopieren: Verwende den Befehl Selection.Copy, um den Inhalt des Word-Dokuments zu kopieren.

    wdAnw.Selection.WholeStory
    wdAnw.Selection.Copy
  5. In neues Dokument einfügen: Erstelle ein neues Dokument und füge den kopierten Inhalt ein.

    Set wdDokzusa = wdAnw.Documents.Add
    wdDokzusa.Content.Paste
  6. Dokument speichern: Speichere das neue Dokument unter dem gewünschten Namen.

    wdDokzusa.SaveAs ThisWorkbook.Path & "\" & "zusa.doc"

Häufige Fehler und Lösungen

  • Fehler beim Öffnen des Dokuments:

    • Ursache: Der angegebene Pfad ist falsch oder das Dokument existiert nicht.
    • Lösung: Überprüfe den Pfad und stelle sicher, dass die Datei existiert.
  • Kopieren schlägt fehl:

    • Ursache: Das Dokument ist nicht aktiv oder die Auswahl ist leer.
    • Lösung: Stelle sicher, dass das richtige Dokument aktiv ist, bevor Du versuchst, den Inhalt zu kopieren.

Alternative Methoden

Eine Alternative zu VBA ist die Verwendung von Power Automate, um Word-Dokumente zu automatisieren und Daten aus Excel zu übernehmen. Dies kann eine benutzerfreundlichere Lösung für weniger erfahrene Programmierer sein.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du Inhalte aus einem Word-Dokument kopieren und in ein anderes Word-Dokument einfügen kannst:

Sub BeispielWordKopieren()
    Dim wdAnw As Object
    Dim wdDok As Object
    Dim wdDokzusa As Object

    Set wdAnw = CreateObject("Word.Application")
    wdAnw.Visible = True
    Set wdDok = wdAnw.Documents.Open("C:\Temp\Schnipsel.docx")

    wdDok.Content.Copy
    Set wdDokzusa = wdAnw.Documents.Add
    wdDokzusa.Content.Paste
    wdDokzusa.SaveAs "C:\Temp\zusa.docx"

    wdDok.Close
    wdAnw.Quit
End Sub

Dieses Beispiel zeigt, wie Du ein bestehendes Word-Dokument öffnest, den Inhalt kopierst und in ein neues Dokument einfügst.


Tipps für Profis

  • Fehlerbehandlung einbauen: Verwende On Error Resume Next, um sicherzustellen, dass Dein Programm auch bei unerwarteten Fehlern weiterläuft.
  • Verweise nutzen: Setze einen Verweis auf die Word-Bibliothek in den Excel-Referenzen, um die Programmierung zu vereinfachen und die Performance zu verbessern.
  • Formate beibehalten: Achte darauf, dass beim Kopieren die Formate erhalten bleiben, indem Du wdFormatOriginalFormatting verwendest.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass der Text korrekt in Word eingefügt wird?
Achte darauf, dass Du die richtige Auswahl in Word triffst, bevor Du den Paste Befehl ausführst.

2. Funktioniert das auch mit älteren Excel-Versionen?
Ja, die VBA-Skripte sollten auch in älteren Versionen von Excel funktionieren, solange die Word-Objektbibliothek verfügbar ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige