Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Excel Tabelle nach Word kopieren

VBA: Excel Tabelle nach Word kopieren
24.08.2020 11:37:24
Johnnn
Grüße in die Runde,
ich sitze nun schon seit Donnerstag an folgender Aufgabenstellung:
In einer Excel-Datei lasse ich mir in einer Tabelle verschiedene Daten darstellen, ich möchte diese Tabelle in Word darstellen, die Zeilenanzahl ist hier variabel, die Spaltenanzahl nicht. Die Word-Datei liegt mir als Vorlage vor, die Tabelle soll an einer bestimmten Stelle dargestellt werden, ich hatte überlegt hier mit einem Textmarker zu arbeiten. Den Verweis zur Microsoft Excel ... Object Library & den Verweis zu Microsoft VBA for Applications Extensibility habe ich gesetzt
Ich habe mir nun schon einige Threads & Videos zu dem Thema angeschaut, auf einen grünen Zweig komme ich jedoch nicht, vll. könnt ihr mir hier weiterhelfen? Der Code, den ich nutze, habe ich mir aus einem anderen Forum gezogen & versucht auf mein Beispiel abzuändern. Funktioniert jedoch eher schlecht als recht, ich bekomme aktuell in der Zeile 49, Spalte 81 den Fehler ausgewiesen "Fehler beim Kompilieren: Variable nicht definiert"
Ich vermute jedoch, dass der ganze Code nicht richtig funktioniert, über jegliche Hilfe würde ich mich sehr freuen.
LG
Option Explicit
Sub Excel_Zu_Word()
Dim xlsAppl As Excel.Application
Dim xlsWbk As Excel.Workbook
Dim xlsWks As Excel.Worksheet
Dim xlsRngTabellenbereich As Excel.Range
Dim vntFile As Variant
Dim wrdDoc As Object 'Eigentlich als Word.Document, funktioniert allerdings nicht, hier bekomme  _
ich die Fehlermeldung "Benutzerdefinierter Typ nicht definiert".
Dim lngAbZeileQuelle As Long
Dim lngAbSpalteQuelle As Long
Dim lngLetzteZeileQuelle As Long
Dim strFirstAddress As String
Dim lngZeileMarker As Long
Dim lngBisSpalteQuelle As Long
Dim rngBM As Range 'Eigentlich als Word.Range, gleiche Fehlermeldung wie bei "Word.Document"
lngBisSpalteQuelle = 9
lngAbSpalteQuelle = 2
lngAbZeileQuelle = 5
Set wrdDoc = CreateObject("Word.Application")
wrdDoc.Visible = True
wrdDoc.documents.Open = ("C:\Users\_._\Desktop\VBA Word Datei\Protokoll.docx")
Set rngBM = wrdDoc.Bookmarks("Meine_Tabelle").Range
Set xlsAppl = CreateObject("Excel.Application")
xlsAppl.Visible = True
vntFile = "C:\Users\_._\Desktop\VBA Word Datei\Vorlage.xlsm"
If Not vntFile = False Then
Set xlsWbk = xlsAppl.Workbooks.Open(vntFile)
Set xlsWks = xlsWbk.Worksheets("Tabelle1")
xlsAppl.Visible = True 'später: False
lngLetzteZeileQuelle = xlsWks.Cells(xlsWks.Rows.Count, lngAbSpalteQuelle).End(-4162).Row ' - _
4162 = xlUp
Set xlsRngTabellenbereich = xlsWks.Range(xlsWks.Cells(lngAbZeileQuelle, lngAbSpalteQuelle), _
xlsWks.Cells(lngLetzteZeileQuelle, lngBisSpalteQuelle))
xlsWks.Range(xlsWks.Cells(lngAbZeileQuelle, lngAbSpalteQuelle), xlsWks.Cells( _
lngLetzteZeileQuelle, lngBisSpalteQuelle)).Copy
wrdDoc.Range(rngBM.Start, rngBM.End).PasteSpecial Link:=False, DataType:=wdPasteRTF, Placement: _
_
=wdInLine, DisplayAsIcon:=False
xlsAppl.CutCopyMode = False
xlsWbk.Close False
End If
xlsAppl.Quit
Set xlsWks = Nothing
Set xlsWbk = Nothing
Set xlsAppl = Nothing
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Excel Tabelle nach Word kopieren
24.08.2020 16:27:29
fcs
Hallo Johnnn,
Deine Beschreibung interpretiere ich so, dass du
- von Excel aus den Tabellenbereich in die Wordvorlage kopieren möchtest
- das Makro in der Datei mit dem Tabellenblatt speichern willst.
Ein grundsätzliches Problem besteht darin, dass du in deinem Code Word-Application und Word-Document durcheinander bringst.
Deklaration der Variablen für die Word-Range. Hier musst du als Object deklarieren oder als Word.Range
Range unter Word ist nicht gleich Range unter Excel.
Wenn das Makro in einer Excel-Datei gespeichert wird, dann sollte mit CreateObject keine weitere Excel-Instanz angelegt werden. Macht die Dinge ggf. nur unnötig kompliziert.
Die Wordvorlage sollte Schreibgeschütz werden. Es kann sonst passieren, dass die Vorlage versehentlich überschrieben wird. z.B. auch dann, wenn die Datei in OneDrive gespeichert ist.
Nachfolgend das angepasste Makro.
LG
Franz
'Makro in einer Excel-Datei gespeichert
'für die Excel-Datei mit dem Makro muss im VBA-Editor der Verweis auf die _
WOrd-Object Library gesetzt sein.
' Alternativ Word-Elemente als  As Object deklarieren und die wd-Variablen _
durch ihre nummerischen Werte ersetzen, dann ist Verweis nicht nötig
Sub Excel_Zu_Word()
Dim xlsAppl As Excel.Application
Dim xlsWbk As Excel.Workbook
Dim xlsWks As Excel.Worksheet
Dim xlsRngTabellenbereich As Excel.Range
Dim vntFile As Variant
Dim wrdAppl As Word.Application
Dim wrdDoc As Word.Document
Dim wrdrngBM As Word.Range
'  Dim wrdAppl As Object
'  Dim wrdDoc As Object
'  Dim wrdrngBM As Object
Dim swrdVorlage As String
Dim lngAbZeileQuelle As Long
Dim lngAbSpalteQuelle As Long
Dim lngLetzteZeileQuelle As Long
Dim strFirstAddress As String
Dim lngZeileMarker As Long
Dim lngBisSpalteQuelle As Long
lngBisSpalteQuelle = 9
lngAbSpalteQuelle = 2
lngAbZeileQuelle = 5
Set wrdAppl = CreateObject("Word.Application")
wrdAppl.Visible = True
swrdVorlage = "C:\Users\_._\Desktop\VBA Word Datei\Protokoll.docx"
Set wrdDoc = wrdAppl.documents.Open(swrdVorlage, ReadOnly:=True)
Set wrdrngBM = wrdDoc.Bookmarks("Meine_Tabelle").Range
Set xlsAppl = Excel.Application 'CreateObject("Excel.Application") - Wenn von Excel-Datei _
aus das Makro gestartet wird, dann keine neue _
Instanz von Excel kreieren. macht die Dinge nur unnötig kompliziert
xlsAppl.Visible = True
vntFile = "C:\Users\_._\Desktop\VBA Word Datei\Vorlage.xlsm"
If Not vntFile = False Then
xlsAppl.ScreenUpdating = False     'statt xlsAppl.Visible = False
Set xlsWbk = xlsAppl.Workbooks.Open(vntFile)
Set xlsWks = xlsWbk.Worksheets("Tabelle1")
'      xlsAppl.Visible = True 'später: False                    'würde ich nicht machen
With xlsWks
lngLetzteZeileQuelle = .Cells(.Rows.Count, lngAbSpalteQuelle).End(-4162).Row '-4162 =  _
xlUp
Set xlsRngTabellenbereich = .Range(.Cells(lngAbZeileQuelle, lngAbSpalteQuelle), _
.Cells(lngLetzteZeileQuelle, lngBisSpalteQuelle))
xlsRngTabellenbereich.Copy
End With
wrdDoc.Range(wrdrngBM.Start, wrdrngBM.End).PasteSpecial Link:=False, DataType:=1, _
Placement:=0, DisplayAsIcon:=False ' DataType: wdPasteRTF = 1 , Placement: wdInLine =  _
0
xlsAppl.CutCopyMode = False
xlsWbk.Close False
End If
wrdAppl.Activate
If xlsAppl.Workbooks.Count = 1 _
And UCase(xlsAppl.Workbooks(1).Name) = "PERSONAL.XLSB" Then xlsAppl.Quit
Set xlsWks = Nothing
Set xlsWbk = Nothing
Set xlsAppl = Nothing
End Sub

Anzeige
AW: VBA: Excel Tabelle nach Word kopieren
26.08.2020 10:10:48
Johnnn
Jetzt hatte ich die letzten Tage nicht mehr ins Forum geschaut.
Vielen Dank für deine Hilfe, das Makro funktioniert! :)
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel Tabelle nach Word kopieren mit VBA


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.

  2. Neues Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)" > Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub Excel_Zu_Word()
       Dim xlsAppl As Excel.Application
       Dim xlsWbk As Excel.Workbook
       Dim xlsWks As Excel.Worksheet
       Dim xlsRngTabellenbereich As Excel.Range
       Dim vntFile As Variant
       Dim wrdAppl As Word.Application
       Dim wrdDoc As Word.Document
       Dim wrdrngBM As Word.Range
       Dim swrdVorlage As String
       Dim lngAbZeileQuelle As Long
       Dim lngAbSpalteQuelle As Long
       Dim lngLetzteZeileQuelle As Long
       Dim lngBisSpalteQuelle As Long
    
       lngBisSpalteQuelle = 9
       lngAbSpalteQuelle = 2
       lngAbZeileQuelle = 5
    
       Set wrdAppl = CreateObject("Word.Application")
       wrdAppl.Visible = True
       swrdVorlage = "C:\Users\_._\Desktop\VBA Word Datei\Protokoll.docx"
       Set wrdDoc = wrdAppl.documents.Open(swrdVorlage, ReadOnly:=True)
       Set wrdrngBM = wrdDoc.Bookmarks("Meine_Tabelle").Range
    
       Set xlsAppl = Excel.Application
       vntFile = "C:\Users\_._\Desktop\VBA Word Datei\Vorlage.xlsm"
       If Not vntFile = False Then
           Set xlsWbk = xlsAppl.Workbooks.Open(vntFile)
           Set xlsWks = xlsWbk.Worksheets("Tabelle1")
    
           With xlsWks
               lngLetzteZeileQuelle = .Cells(.Rows.Count, lngAbSpalteQuelle).End(-4162).Row
               Set xlsRngTabellenbereich = .Range(.Cells(lngAbZeileQuelle, lngAbSpalteQuelle), _
               .Cells(lngLetzteZeileQuelle, lngBisSpalteQuelle))
               xlsRngTabellenbereich.Copy
           End With
    
           wrdDoc.Range(wrdrngBM.Start, wrdrngBM.End).PasteSpecial Link:=False, DataType:=1, _
           Placement:=0, DisplayAsIcon:=False
           xlsAppl.CutCopyMode = False
           xlsWbk.Close False
       End If
    
       wrdAppl.Activate
       If xlsAppl.Workbooks.Count = 1 And UCase(xlsAppl.Workbooks(1).Name) = "PERSONAL.XLSB" Then xlsAppl.Quit
       Set xlsWks = Nothing
       Set xlsWbk = Nothing
       Set xlsAppl = Nothing
    End Sub
  4. Verweise setzen: Im VBA-Editor, gehe auf Extras > Verweise und setze einen Haken bei "Microsoft Word xx.0 Object Library".

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: Variable nicht definiert: Überprüfe, ob alle Variablen korrekt deklariert sind. Achte darauf, dass die Word-Objekte richtig gesetzt werden.
  • Word-Dokument nicht gefunden: Stelle sicher, dass der Pfad zur Word-Datei korrekt ist und die Datei existiert.
  • Kopieren funktioniert nicht: Überprüfe, ob der markierte Bereich in Excel korrekt ist und dass das Word-Dokument nicht schreibgeschützt ist.

Alternative Methoden

Wenn Du Probleme mit VBA hast, kannst Du auch die Möglichkeiten über das Excel-Menü nutzen:

  1. Markiere den Bereich in Excel.
  2. Rechtsklick > Kopieren.
  3. Öffne Word und füge den Inhalt mit STRG + V ein.
  4. Du kannst den Textmarker in Word verwenden, um den eingefügten Text hervorzuheben.

Praktische Beispiele

  • Tabelle kopieren: Verwende das oben genannte Makro, um eine Tabelle aus Excel in ein Word-Dokument zu kopieren.
  • Textmarker in Excel: Du kannst die Interior.Color-Eigenschaft in VBA nutzen, um Zellen in Excel zu markieren, bevor du sie kopierst.

    xlsWks.Range("A1:B10").Interior.Color = RGB(255, 255, 0) ' Gelb markieren

Tipps für Profis

  • Automatisierung: Du kannst das Makro so anpassen, dass es automatisch bei bestimmten Ereignissen ausgeführt wird, wie z.B. beim Öffnen der Datei.
  • Weitere Formatierungen: Überlege, zusätzlich Formatierungen wie Schriftart oder -größe in Word anzuwenden, nachdem die Daten eingefügt wurden.
  • Fehlermeldungen abfangen: Implementiere Fehlerbehandlungsroutinen, um spezifische Fehlermeldungen zu protokollieren.

FAQ: Häufige Fragen

1. Wie kann ich den Excel-Bereich anpassen, der nach Word kopiert wird?
Du kannst die Variablen lngAbZeileQuelle, lngAbSpalteQuelle, und lngBisSpalteQuelle im Code anpassen, um den gewünschten Bereich festzulegen.

2. Muss ich die Word-Objektbibliothek verwenden?
Es ist empfehlenswert, um die Vorteile der IntelliSense-Funktionalität zu nutzen, aber du kannst auch As Object verwenden, wenn du den Verweis nicht setzen möchtest.

3. Wie kann ich den Textmarker in Excel verwenden?
Um Zellen in Excel zu markieren, kannst du die Hintergrundfarbe der Zellen ändern, wie im praktischen Beispiel gezeigt.

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