Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1776to1780
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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! :)

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige