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

Forumthread: VBA Excel Zellinhalte in Word Tabelle einfügen

VBA Excel Zellinhalte in Word Tabelle einfügen
25.08.2015 12:48:08
Moritz
Hallo Zusammen,
ich habe folgendes Problem. Ich möchte die Daten eines bestimmten Excel-Datenblatts über einen CommandButton automatisch in eine Word Tabelle einfügen lassen, hierbei ist die Auswahl der Tabellenzellen sowohl in Excel als auch Word wichtig. Dieses Word Doc soll dann zur Abstimmung der jeweiligen Textbausteine versendet werden (Verwendung des erstellten Dokuments) und daraufhin wieder in die ursprüngliche Excel-Datei eingefügt werden, indem die alten Zellinhalte überschrieben werden. Der Export aus Excel heraus, läuft über ein Makro (aus dem Internet zusammengebastelt) , welches automatisch einen Serienbrief generiert. Wenn ich dieses Makro jedoch durchlaufen lasse, löscht es mir das in Word hinterlegte Makro des "Datenimport" (entspricht ja eigentlich auch einem Export), dessen CommandButton jedoch bleibt bestehen. Kann mir hier jemand weiterhelfen?
Das Serienbrief Makro sieht wie folgt aus:

Private Const strDatenQuelle As String = "C:\WorkBox_Vorlagen\Mappe1.xlsx"  'Transfer-Excel- _
Datei Pfad
Private Const strWOrdvorlage As String = "C:\WorkBox_Vorlagen\Archiv_Versuche\Import.dotm"    '  _
_
Word-Vorlage Serienbrief Pfad
Sub CommandButton1_Click()
Dim Bereich As Range, wb As Workbook
Z = Cells(Rows.Count, 3).End(xlUp).Row
Set Bereich = Range("A1: P2" & Z & "") 'Bereich mit Serienbrief-Daten
Set wb = Workbooks.Open(Filename:=strDatenQuelle)
'    Workbooks.Open Filename:= _
"D:\Time WorkBoxVersuch.xls"
'Datei Speichern und schliessen
wb.Save
wb.Close
Call Serienb
End Sub
Sub Serienb() 'Im Excel VBA-Editor für die Datei mit diesem Makro unter Extras-Verweise _
den Verweis auf die Microsoft Word x.y Object Library aktivieren!!
Dim WinWord, WinDoc As Word.Document, docImport As Word.Document
Dim sFile As String, strCon As String
sFile = strWOrdvorlage
Set WinWord = CreateObject("Word.Application")
With WinWord
.Visible = True
'Vorlagedatei öffnen
Set WinDoc = .Documents.Open(sFile)
With WinDoc
With .MailMerge
'Datenquelle öffnen
.OpenDataSource Name:=strDatenQuelle, _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", _
Revert:=False, Format:=wdOpenFormatAuto, _
Connection:="Provider=Microsoft.Jet.OLEDB.4.0;Password="""";" _
& "User ID=Admin;" _
& "Data Source=" & strDatenQuelle & ";" _
& "Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";" _
& "Jet OLEDB:System database="""";" & "Jet OLEDB:Registry Path="""";" _
& "Jet OLEDB:Database Password="""";" _
& "Jet OLEDB:Engine ", _
SQLStatement:="SELECT * FROM `Tabelle1$`", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
'Serienbrief mit allen Daten in neuem Dokument erstellen
.Destination = NewDocument         'wdSendToNewDocument, ohne SendTo funktioniert es    _
_
_
strWOrdvorlage
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
Set docImport = WinWord.ActiveDocument
'Datenquelle wieder schliessen
.DataSource.Close
End With
'Vorlagedatei wieder schliessen (entfernt)
docImport.Application.WindowState = wdWindowStateMaximize
End With
Set docImport_Vorlage = Nothing
Set WinWord = Nothing
Set WinDoc = Nothing
End With
End Sub

Was noch gesagt werden muss ist, dass als Datenquelle eine andere, verlinkte Exceldatei herhalten muss bisher, weil ich es nicht hinbekommen habe das aktive Exceldokument als Datenquelle zu verwenden.
Das Word Makro zum "Datenimport" sieht wie folgt aus:

Private Sub CommandButton1_Click()
Dim i As Integer
Dim xlApp As Excel.Application
Dim xlWorkbook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim strPathExcel As String
Dim blnFileExists As Boolean
strPathExcel = "C:\Versuche\Import.xlsm"
'* Excel öffnen
Set xlApp = CreateObject("Excel.Application")
'* Überprüfen ob File existiert
If Dir(strPathExcel) = "" Then '* File existiert nicht
blnFileExists = False
Set xlWorkbook = xlApp.Workbooks.Add
Else '* File existiert
blnFileExists = True
Set xlWorkbook = xlApp.Workbooks.Open(strPathExcel)
End If
'* Applikation "verstecken"
xlApp.Visible = False
Set xlSheet = xlWorkbook.Worksheets(1)
Set xlSheet2 = xlWorkbook.Worksheets(2)        'entsprechendes Tabellenblatt angeben
'*Bestimmte Felder über deren Namen ansprechen
'* und in die gewünschte Zelle setzen
xlSheet2.Cells(2, 1) = ActiveDocument.Tables(1).Cell(2, 1) 'gewünschtes Tabellenblatt, oben  _
aus Set die Bezeichnung übernehmen
xlSheet.Cells(2, 2) = ActiveDocument.Tables(1).Cell(2, 2)
xlSheet.Cells(2, 3) = ActiveDocument.Tables(1).Cell(4, 1)
MsgBox "Export abgeschlossen!"
'* Applikation wieder sichtbar machen
xlApp.Visible = True
'* Excel schliessen
Set xlWorkbook = Nothing
Set xlSheet = Nothing
'* Applikation beenden
xlApp.Quit
Set xlApp = Nothing
End Sub

Das Worddokumemt könnte auch als Template abgespeichert werden. Kann hier jemand bei diesem Problem weiterhelfen? Möglicherweise muss man den Export aus Excel heraus nicht über eine Serienbrieffunktion starten, vlt vereinfacht dies das ganze. Vielen Dank schon mal im Voraus! Grüße :)

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Excel Zellinhalte in Word Tabelle einfügen
28.08.2015 10:34:45
Jürgen
Hallo Moritz,
mit der Ausgabe der Serienbriefe in eine einzige Word-Datei wird das ursprüngliche Dokument für jeden Datensatz in die Zieldatei in einem eigenen Abschnitt eingefügt. Makros werden dabei jedoch nicht übernommen.
Um Dein Ziel zu erreichen müsstest Du nach meiner Ansicht über das Word-MailMerge-Obkjekt per Schleife durch jeden Datensatz gehen und einzelne Word-Dateien speichern.
Wenn Du das Gesamtergebnis des Serienbriefs in einer einzigen Datei benötigst, müsstest Du das Makro und die Schaltfläche nach der Dateierstellung (manuell?) hinzufügen.
Gruß, Jürgen
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Excel Zellinhalte in Word Tabelle einfügen


Schritt-für-Schritt-Anleitung

Um Excel-Daten in eine Word-Tabelle einzufügen, kannst Du den folgenden VBA-Code verwenden. Dieser Code ermöglicht es Dir, Daten aus Excel in eine Word-Tabelle einzufügen und umgekehrt.

  1. Öffne Excel und Word: Stelle sicher, dass beide Programme geöffnet sind.
  2. Erstelle ein neues VBA-Modul:
    • Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.
    • Klicke auf Einfügen > Modul.
  3. Füge den folgenden Code ein:
Sub ExportToWord()
    Dim wdApp As Object
    Dim wdDoc As Object
    Dim ws As Worksheet
    Dim rng As Range

    ' Setze das Arbeitsblatt und den Datenbereich
    Set ws = ThisWorkbook.Sheets("DeinBlattname")
    Set rng = ws.Range("A1:B10") ' Passe den Bereich an

    ' Erstelle eine Instanz von Word
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = True

    ' Erstelle ein neues Dokument
    Set wdDoc = wdApp.Documents.Add

    ' Füge die Daten aus Excel in eine Tabelle in Word ein
    Dim tbl As Object
    Set tbl = wdDoc.Tables.Add(wdDoc.Range, rng.Rows.Count, rng.Columns.Count)

    Dim r As Long, c As Long
    For r = 1 To rng.Rows.Count
        For c = 1 To rng.Columns.Count
            tbl.Cell(r, c).Range.Text = rng.Cells(r, c).Value
        Next c
    Next r

    ' Schließe die Word-Anwendung
    Set wdDoc = Nothing
    Set wdApp = Nothing
End Sub
  1. Passe den Code an: Ändere "DeinBlattname" und den Datenbereich ("A1:B10") entsprechend Deinen Bedürfnissen.
  2. Führe den Code aus: Gehe zurück zu Excel und führe das Makro aus.

Häufige Fehler und Lösungen

  • Fehler: Word-Anwendung öffnet sich nicht.

    • Lösung: Überprüfe, ob Microsoft Word korrekt installiert und registriert ist.
  • Fehler: Daten werden nicht korrekt in die Word-Tabelle eingefügt.

    • Lösung: Stelle sicher, dass der Datenbereich in Excel ausgewählt und korrekt im Code angegeben ist.
  • Fehler: Makros werden nicht ausgeführt.

    • Lösung: Überprüfe die Sicherheitseinstellungen in Excel unter Datei > Optionen > Sicherheitscenter > Einstellungen für das Sicherheitscenter.

Alternative Methoden

Wenn Du keine VBA verwenden möchtest, kannst Du die Excel-Daten auch manuell in Word einfügen:

  1. Kopiere die Excel-Daten (Strg + C).
  2. Wechsle zu Word und wähle die Stelle, an der die Tabelle eingefügt werden soll.
  3. Füge die Daten ein (Strg + V) und wähle Einfügen > Tabelle > Einfügen von Excel-Tabelle.

Praktische Beispiele

  1. Daten aus einer Pivot-Tabelle:

    • Du kannst eine Pivot-Tabelle in Excel erstellen und die Daten dann mit dem obigen VBA-Skript in eine Word-Tabelle einfügen.
  2. Daten aus mehreren Excel-Tabellen:

    • Erstelle eine Schleife im VBA-Code, um Daten aus mehreren Tabellen in ein einzelnes Word-Dokument einzufügen.

Tipps für Profis

  • Automatisierung: Optimiere Deinen VBA-Code, indem Du Schleifen und Bedingungen einfügst, um den Prozess zu automatisieren.
  • Verwendung von Vorlagen: Speichere Deine Word-Dokumente als Vorlagen, um wiederverwendbare Formate zu haben.
  • Fehlerbehandlung: Füge eine Fehlerbehandlung in Deinen VBA-Code ein, um Probleme elegant zu handhaben.

FAQ: Häufige Fragen

1. Wie kann ich Daten aus Word in Excel importieren? Du kannst ein Makro in Excel schreiben, das die Word-Daten über das Word.Application-Objekt importiert.

2. Was mache ich, wenn mein VBA-Code nicht funktioniert? Überprüfe die Einstellungen für deine Makros in Excel und stelle sicher, dass die richtigen Verweise im VBA-Editor gesetzt sind (z.B. Microsoft Word x.y Object Library).

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