Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1720to1724
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

Aus Excel Tabellenbereich in Word anwählen

Aus Excel Tabellenbereich in Word anwählen
15.11.2019 14:44:20
Johannes
Hallo alle,
Ich habe eine VBA geschrieben die folgende Funktionen hat:
Zunächst werden von einem Datum ausgehend die Anzahl der Tage des betreffenden Monats brechnet,
dann dann wird entland einer Zeile nach einem Schagwort gesucht.
Wird das schlagwort gefunden wird eine Word Datei geöffnet, umbennant und gespeichert.
Dann wird entsprechend der Anzahl der Monatstage in einer WordTabelle entsprechend viele Zeilen hinzu addiert und mit einem Datum versehen.
Dann wird in der Exceldatei ein Bereich definiert und kopiert.
Soweit klappt alles
Was es jetzt noch brauch ist dass in der Word datei ein entsprechender Bereich in der Tabelle ausgewähöt wird und die Werte eingefügt werden.
Leider komme ich hier nicht weiter.
kann mir jmd helfen?
P.S. Ich weiß es sind zuviele Variablen definiert :)
Sub datenausexcel_3()
Dim appWord As Word.Application 'Object
Dim wrdDocument As Word.Document 'Object
Dim intZ As Integer, intS As Integer 'Anzahl Zeilen und Spalten
Dim wks As Worksheet
Dim strVorlage As String
Dim strWKB_Name As String
Dim objTbl(1) As Word.Table
Dim NumbVNB As Integer
Dim SpeicherName As String  'Notwendig um es Umzubennen
Dim Speicherpfad As String  'Richtiger Speicherpfad später ergänzen
Dim VNB As String
Dim d As Date
Dim a As Integer
Dim intZ2 As Integer, intS2 As Integer
Dim Zeilanz As Integer
Dim rng As Range
d = ThisWorkbook.Sheets("Prognosegüte (d)").Cells(4, 2).Value
a = Day(DateSerial(Year(d), Month(d) + 1, 0))
On Error GoTo FehlerMarke
strWKB_Name = ActiveWorkbook.Name
Set wks = ActiveWorkbook.Worksheets("Prognosegüte (d)") 'Tabellenblatt mit den zu ü _
bertragenden Daten
Speicherpfad = "Y:\VBA Versuche\"
'Speicherpfad2 = "N:\" & NumbVNB - 2 & Format(DateSerial(Year(Date),  _
Month(Date), 0), "YYYY") & "\Reporting"
'SpeicherName = Speicherpfad & Format(DateSerial(Year(Date), Month(Date) _
_
, 0), "YYYY-MM") & " NEB Bericht " & ThisWorkbook.Sheets("Prognosegüte (d)").Cells(1, 7).Value & _
".docx"
For NumbVNB = 1 To 65
'Hier mit If Bedingung beginnen
If Cells(1, NumbVNB).Text = "JA" Then
SpeicherName = Speicherpfad & Format(DateSerial(Year(d), Month(d) +  _
_
1, 0), "YYYY-MM") & " NEB Bericht " & ThisWorkbook.Sheets("Prognosegüte (d)").Cells(1, NumbVNB - _
1).Value & ".docx"
Set appWD = CreateObject("Word.Application")
Set wrdDocument = appWD.Documents.Open("Y:\VBA Versuche\NEB-Bericht. _
_
docx")
wrdDocument.SaveAs Filename:=SpeicherName
wrdDocument.Bookmarks("Monat").Range.Text = Format(DateSerial(Year(  _
_
d), Month(d) + 1, 0), "MMMM YYYY")
wrdDocument.Bookmarks("Monat2").Range.Text = Format(DateSerial(Year( _
_
d), Month(d) + 1, 0), "MMMM YYYY")
wrdDocument.Bookmarks("VNB").Range.Text = ThisWorkbook.Sheets(" _
Prognosegüte (d)").Cells(1, NumbVNB - 1).Value
wrdDocument.Bookmarks("VNB2").Range.Text = ThisWorkbook.Sheets(" _
Prognosegüte (d)").Cells(1, NumbVNB - 1).Value
appWD.Visible = True    'Nur für die Tests später deaktivieren
For Zeilanz = 0 To a - 1
wrdDocument.Tables(1).Cell(intZ - 4, 1).Range = d + Zeilanz
wrdDocument.Tables(1).Rows.Add
Next Zeilanz
wks.Range(Cells(6, NumbVNB - 2), Cells(a + 5, NumbVNB)).Copy
appWord.Activate
Set rng = wrdDocument.Range
rng.Select.Range Start:=wrdDocument.Tables(1).Cell(2, 2).Range.Start,   _
_
End:=wrdDocument.Tables(1).Cell(a + 1, 4).Range.End
wrdDocument.Range.Paste
End If
Next NumbVNB
FehlerMarke:
MsgBox Err.Description
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus Excel Tabellenbereich in Word anwählen
15.11.2019 15:33:28
fcs
Hallo Johannes,
am besten funktioniert es, wenn die Word-Tabelle "sauber" formatiert ist.
Dann überträgt man Zelle für Zelle in 2 geschachtelten For-Next-Schleifen die Inhalte von Excel nach Word wobei in Word die Text-Eigenschaft der Excelzellen eingetragen wird.
Ich hab die Code-Syntax für die Objekte der Zellen in der Wordtabelle nicht griffbereit. Ich melde mich später noch einmal.
LG
Franz
AW: Aus Excel Tabellenbereich in Word anwählen
15.11.2019 23:34:23
fcs
Hallo Johannes,
ich hab dir das Makro angepasst, wie man die zellenweise Übertragung von Excel nach Word umsetzen kann.
In der Wordvorlage habe die Wordtabelle zum Testen mit 2 Zeilen angelegt.
1. Zeile = Spaltentitel
2. Zeile = 1. Zeile in die Exceldaten eingetragen werden sollen
LG
Franz
Sub datenausexcel_3()
Dim appWD As Word.Application 'Object
Dim wrdDocument As Word.Document 'Object
Dim intZ As Integer, intS As Integer 'Anzahl Zeilen und Spalten
Dim wksPrognose As Worksheet
Dim strVorlage As String
Dim strWKB_Name As String
Dim objTbl(1) As Word.Table
Dim NumbVNB As Integer
Dim SpeicherName As String  'Notwendig um es Umzubennen
Dim Speicherpfad As String  'Richtiger Speicherpfad später ergänzen
Dim VNB As String
Dim d As Date
Dim a As Integer
Dim intZ2 As Integer, intS2 As Integer
Dim Zeilanz As Integer
Dim rng As Range
Dim zeiXl As Long, spaXl As Long, zeiWd As Integer, spaWd As Integer
d = ThisWorkbook.Sheets("Prognosegüte (d)").Cells(4, 2).Value
a = Day(DateSerial(Year(d), Month(d) + 1, 0))
On Error GoTo FehlerMarke
strWKB_Name = ActiveWorkbook.Name
Set wksPrognose = ActiveWorkbook.Worksheets("Prognosegüte (d)") 'Tabellenblatt mit den _
zu übertragenden Daten
Speicherpfad = "Y:\VBA Versuche\"
'Speicherpfad2 = "N:\" & NumbVNB - 2 _
& Format(DateSerial(Year(Date), Month(Date), 0), "YYYY") & "\Reporting"
'SpeicherName = Speicherpfad _
& Format(DateSerial(Year(Date), Month(Date), 0), "YYYY-MM") & " NEB Bericht " _
& ThisWorkbook.Sheets("Prognosegüte (d)").Cells(1, 7).Value & ".docx"
Set appWD = CreateObject("Word.Application")
appWD.Visible = True    'Nur für die Tests später deaktivieren
For NumbVNB = 1 To 65
'Hier mit If Bedingung beginnen
If wksPrognose.Cells(1, NumbVNB).Text = "JA" Then
SpeicherName = Speicherpfad _
& Format(DateSerial(Year(d), Month(d) + 1, 0), "YYYY-MM") _
& " NEB Bericht " & wksPrognose.Cells(1, NumbVNB - 1).Value & ".docx"
Set wrdDocument = appWD.Documents.Open(Speicherpfad & "NEB-Bericht.docx")
wrdDocument.SaveAs Filename:=SpeicherName
wrdDocument.Bookmarks("Monat").Range.Text = _
Format(DateSerial(Year(d), Month(d) + 1, 0), "MMMM YYYY")
wrdDocument.Bookmarks("Monat2").Range.Text = _
Format(DateSerial(Year(d), Month(d) + 1, 0), "MMMM YYYY")
wrdDocument.Bookmarks("VNB").Range.Text = wksPrognose.Cells(1, NumbVNB - 1).Value
wrdDocument.Bookmarks("VNB2").Range.Text = wksPrognose.Cells(1, NumbVNB - 1).Value
'Tabellengröße in Word anpassen und Datum in Spalte 1 eintragen
zeiWd = 1
For Zeilanz = 0 To a - 1
zeiWd = zeiWd + 1
wrdDocument.Tables(1).Cell(zeiWd, 1).Range = d + Zeilanz
wrdDocument.Tables(1).Rows.Add
Next Zeilanz
'Zellbereich mit den Daten in Excel einer Variablen zuweisen
With wksPrognose
Set rng = .Range(.Cells(6, NumbVNB - 2), .Cells(a + 5, NumbVNB))
End With
'Daten aus Excel in Wordtabelle übertragen
With rng
zeiWd = 1
For zeiXl = 1 To .Rows.Count
zeiWd = zeiWd + 1
spaWd = 1
For spaXl = 1 To .Columns.Count
spaWd = spaWd + 1
wrdDocument.Tables(1).Cell(zeiWd, spaWd).Range.Text = _
.Cells(zeiXl, spaXl).Text
Next spaXl
Next zeiXl
End With
wrdDocument.Save
'            wrdDocument.Close 'Zeile nach Testphase aktivieren
End If
Next NumbVNB
'    appWD.Quit 'Zeile nach Testphase aktivieren
Exit Sub
FehlerMarke:
MsgBox Err.Description
End Sub

Anzeige
AW: Aus Excel Tabellenbereich in Word anwählen
18.11.2019 09:25:14
Johannes
Hallo Franz,
Danke für deine Hilfe. Die Sache ist die Zellenweise habe ich die Übertragung schon hinbekommen (wenn auch anders gecodet) nur dauert das dann recht lange weil mit allen Berichten die ich hier schreibe habe ich mehr als 4000 Iterationen wenn ich Zelle für Zelle durchgehe.
Deswegen versuche ich grade das auf Bereiche umzustellen :P
AW: Aus Excel Tabellenbereich in Word anwählen
18.11.2019 11:40:04
fcs
Hallo Johannes,
ich hab nochmals in den Möglichkeiten gesucht, um einen kopierten Excelbereich in eine vorhanden Wordtabelle einzufügen.
Nachfolgend der relevante Abschnitt des Makros nach dem Anfügen der Leerzeilen an die Tabelle in der WOrdvorlage.
Ich denke, dass dein ursprüngliches Makro daran gescheitert ist, dass die rng als Range (Excel) deklariert ist und du dan versucht hast dieser Variablen einen Word-Range zuzuweisen.
Welche Variante für das Einfügen in Word für dich am besten geeignet ist musst du mal probieren.
LG
Franz
    'zusätzliche Variable für Word-Range-Objekt
Dim wdRange As Word.Range 'Object
'Zellbereich mit den Daten in Excel einer Variablen zuweisen
With wksPrognose
Set rng = .Range(.Cells(6, NumbVNB - 2), .Cells(a + 5, NumbVNB))
End With
With wrdDocument
Set wdRange = .Range(.Tables(1).Cell(2, 2).Range.Start, _
.Tables(1).Cell(rng.Rows.Count + 1, 4).Range.End)
End With
rng.Copy
'    wdRange.PasteAndFormat (23) '23 = wdTableOverwriteCells 'Zellformate aus Excel werden mit  _
kopiert
'oder
wdRange.PasteExcelTable linkedtoexcel:=False, wordformatting:=False, RTF:=False 'Je nach _
Parameter-Wert für wordformatting und RTF werden unterschiedliche Formate übernommen

Anzeige
AW: Aus Excel Tabellenbereich in Word anwählen
19.11.2019 10:34:17
Johannes
Danke - Ich hab den Code dann noch leicht verändert aber das hat sehr gut funktioniert !

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige