Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1300to1304
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

Tabellenblätter nach Word VBA

Tabellenblätter nach Word VBA
25.02.2013 21:15:03
Marco
Hallo User,
habe Probleme mehrere Tabellenblätter von Excel in eine Word-Datei untereinander mit 2 Leerzeilen Abstand zwischen den Tabellen zu kopieren.
Bisher habe ich folgenden Code, der mir aber immer nur ein Tabellenblatt in Word kopiert:

Sub Rubrik_zu_Word()
Unload was
Dim appWord As Object
Dim doc As Object
Set appWord = CreateObject("Word.Application")
Set doc = appWord.Documents.Add("D:\Test-Rubrik.doc") '*** verwendet Datei nur als Vorlage ***
'Set doc = appWord.Documents.Open("D:\Test-Rubrik.doc") '*** öffnet die Datei selbst ***
appWord.Visible = True
ThisWorkbook.Sheets("A").UsedRange.Copy '*** oder was auch immer ***
ThisWorkbook.Sheets("B").UsedRange.Copy '*** oder was auch immer ***
ThisWorkbook.Sheets("C").UsedRange.Copy '*** oder was auch immer ***
doc.Range.Paste '*** Zeile bestimmen - Tabelle rein ***
doc.SaveAs "D:\Test-Rubrik-1.doc" '*** das Dokument speichern ***
doc.Close '*** das Dokument schließen ***
appWord.Quit '*** Word beenden ***
'*** Aufräumen ***1
Set appWord = Nothing
Set doc = Nothing
MsgBox "Word-Datei wurde erstellt", vbOKOnly, "Bestätigung"
End Sub

Zusätzlich soll bzw. muss die Zellbreite und auch die Schriftart bzw. Schriftgröße noch geändert werden.
Hat jemand einen Vorschlag für mein Problem?
Ich bin absoluter Neuling in VBA, daher wäre ich sehr dankbar für jede Antwort.
Gruß
Marco

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblätter nach Word VBA
25.02.2013 21:39:26
ing.grohn
Hallo Marco,
probier doch mal folgendes aus:

Sub testword()
Dim wsr As Object
Set wsr = Workbooks("Rechnung.xls").Sheets("RA-Buch")
With ActiveDocument.Application.Selection
wsr.Range("A1:F1").Copy
.PasteExcelTable False, False, False
wsr.Range("A25:F40").Copy
.PasteAppendTable
End With
End Sub

kopiert den Tabellenkopf (Zeile 1) und anschliessend einen Tabellenbereich ins Worddokument
Mit freundlichen Grüßen
Albrecht

AW: Tab n. Word mit Leerzeile
25.02.2013 21:48:19
ing.grohn
Hallo Marco,

Sub testword()
Dim wsr As Object
Set wsr = Workbooks("Rechnung.xls").Sheets("RA-Buch")
With ActiveDocument.Application.Selection
wsr.Range("A1:F1").Copy
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
wsr.Range("A25:F40").Copy
.PasteExcelTable False, False, False
End With
End Sub

mit leerzeile
MfG
Albrecht

Anzeige
AW: Tab n. Word mit Leerzeile
25.02.2013 22:12:08
Marco
Hallo Albrecht,
erst mal ein Dankeschön für die schnelle Antwort.
Mit einzelnen Zellbereichen von einem einzigen Tabellenblatt mag es vielleicht gehen, aber wenn ich mehrere Tabellenblätter habe dann funzt es einfach nicht.
VBA meckert auch bei .TypeParagraph immer rum.
Irgendwie muss Word wissen, wo die erste Tabelle endet, dann zwei Leerzeichen machen muss, und dann die Tabelle vom nächsten Tabellenblatt einfügen muss. Bis jetzt überschreibt er mir immer die Tabelle. Das heisst in meinem Beispiel überträgt er das Tabellenblatt A, überschreibt es mit dem Tabellenblatt B, und dieses überschreibt er mit dem Tabellenblatt C. Wie gesagt, Word weiss nicht wo er das nächste Tabellenblatt einfügen soll...und das ist der springende Punkt...
Wie gesagt, ich bin für jeden Rat dankbar...
Gruß
Marco

Anzeige
AW: Tab n. Word mit Leerzeile
26.02.2013 07:34:21
ing.grohn
Hallo Marco,
das funktioniert auch mit unterschiedlichen Tabellenblättern! (siehe unten)
Ich benutze hier .Selection! Selektieren wird nicht gern gesehen! weil man im "unsicheren" Bereich herumstochert!! Wenn der Cursor im Word-Dokument steht, wo die Tabelle hin soll, funktionierts aber (man sollte auch in Word besser mit RAnge arbeiten, kann ich aber nicht).
Wenn VBA an TypeParagraph rummeckert ist aber was grundsätzlich faul!!

Sub testword()
Dim wsr As Object
Dim wsb As Object
Set wsr = Workbooks("Rechnung.xls").Sheets("RA-Buch")
Set wsb = Workbooks("Rechnung.xls").Sheets("RA-Buch-2011")
With ActiveDocument.Application.Selection
wsr.Range("A1:F1").Copy
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
wsr.Range("A25:F40").Copy
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
wsb.Range("A25:F40").Copy
.PasteExcelTable False, False, False
End With
Set wsr = Nothing
Set wsb = Nothing
End Sub

Mit ferundlichen Grüßen
Albrecht

Anzeige
AW: Tab n. Word m Zw.-Tit.
26.02.2013 07:45:58
ing.grohn

Sub testword()
Dim wsr As Object
Dim wsb As Object
Set wsr = Workbooks("Rechnung.xls").Sheets("RA-Buch")
Set wsb = Workbooks("Rechnung.xls").Sheets("RA-Buch-2011")
With ActiveDocument.Application.Selection
.TypeText Text:="Überschrift"
.TypeParagraph
wsr.Range("A1:F1").Copy
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
.TypeText Text:="1. Tabelle"
.TypeParagraph
wsr.Range("A25:F40").Copy
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
.TypeText Text:="2. Tabelle"
.TypeParagraph
wsb.Range("A25:F40").Copy
.PasteExcelTable False, False, False
End With
Set wsr = Nothing
Set wsb = Nothing
End Sub

mfG
Albrecht

Anzeige
AW: Tab n. Word m Zw.-Tit.
26.02.2013 21:50:47
Marco
Hallo Albrecht,
was soll ich sagen...du bist ein Genie...es funzt alles soweit...riesengroßes Dankeschön dafür...
Jetzt muss ich nur noch hinbekommen, dass die Tabellenbreite ( d.h. die Tabelle besteht aus drei Spalten, und jede Spalte sollte eine gewisse Breite haben )passt, und ich die Schriftart und Schriftgröße verändern, und in das Makro mit einbauen könnte...das wäre einfach genial...hättest Du hierfür einen Vorschlag?
Hier nochmal der abgeänderten Code:

Sub Rubrik_zu_Word()
Unload was
Dim appWord As Object
Dim doc As Object
Dim wsa As Object
Dim wsb As Object
Dim wsc As Object
Set appWord = CreateObject("Word.Application")
Set doc = appWord.Documents.Add("D:\Test-Rubrik.doc") '*** verwendet Datei nur als Vorlage ***
'Set doc = appWord.Documents.Open("D:\Test-Rubrik.doc") '*** öffnet die Datei selbst ***
appWord.Visible = True
Set wsa = ThisWorkbook.Sheets("A")
Set wsb = ThisWorkbook.Sheets("B")
Set wsc = ThisWorkbook.Sheets("C")
With doc.Application.Selection
wsa.UsedRange.Copy
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
wsb.UsedRange.Copy
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
wsc.UsedRange.Copy
.PasteExcelTable False, False, False
End With
doc.SaveAs "D:\Test-Rubrik-1.doc" '*** das Dokument speichern ***
doc.Close '*** das Dokument schließen ***
appWord.Quit '*** Word beenden ***
'*** Aufräumen ***
Set wsa = Nothing
Set wsb = Nothing
Set wsc = Nothing
Set appWord = Nothing
Set doc = Nothing
MsgBox "Word-Datei wurde erstellt", vbOKOnly, "Bestätigung"
End Sub

Gruß
Marco

Anzeige
AW: Tab n. Word m Tab. schm.
27.02.2013 14:15:04
ing.grohn
Hallo Marco,
häng folgendes hinter die With-Schleife:

With doc.Tables(2) 'Tabelle "1." auf 90% kürzen
.PreferredWidthType = wdPreferredWidthPercent
.PreferredWidth = 90
End With

es gibt auch die die Punkt-Verkleinerung (die funktioniert aber scheints nicht immer, k. A.)
Die Schriftgröße würde ich in der Exceltabelle ändern (ist m. E. einfacher).
i.h.D.g.z.h
Mit freundlichen Grüßen
Albrecht

AW: Tab n. Word m Tab. schm.
27.02.2013 22:15:30
Marco
Hallo Albrecht,
habe jetzt schon einiges versucht, aber es kommt immer wieder die Fehlermeldung
"Objekt unterstützt diese Eigenschaft oder Methode nicht."
in der Zeile ".PreferredWidthType = wdPreferredWidthPercent"
Gruß
Marco

Anzeige
AW: Tab n. Word m Tab. schm.
28.02.2013 08:03:08
ing.grohn
Hallo Marco,
folgendes funktioniert bei mir:

Sub Rubrik_zu_Word()
'Unload was
Dim wsr As Object
Dim wsb As Object
Dim appWord As Object
Dim doc As Object
Set wsr = Workbooks("Rechjutta.xls").Sheets("RA-Buch")
Set appWord = CreateObject("Word.Application")
Set doc = appWord.Documents.Add("C:\excel\Test.doc") '*** verwendet Datei nur als Vorlage * _
appWord.Visible = True
With doc.Application.Selection
.EndKey Unit:=wdStory
.TypeText Text:="Überschrift"
.TypeParagraph
wsr.Range("A1:F1").Copy
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
.TypeText Text:="1. Tabelle"
.TypeParagraph
wsr.Range("A25:F40").Copy
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
.TypeText Text:="2. Tabelle"
.TypeParagraph
wsr.Range("A55:F60").Copy
.PasteExcelTable False, False, False
End With
With doc.Tables(2) 'Tabelle "1." auf 90% kürzen
.PreferredWidthType = wdPreferredWidthPercent
.PreferredWidth = 90
End With
With doc.Tables(1)
.PreferredWidthType = wdPreferredWidthPoints
.PreferredWidth = CentimetersToPoints(16.86)
End With
Set appWord = Nothing
Set doc = Nothing
MsgBox "Word-Datei wurde erstellt", vbOKOnly, "Bestätigung"
End Sub

ich habe beide Varianten (% und cm) drin (wie gesagt cm will nicht immer (ohne Fehlermeldung, wird aber nicht gemacht), vielleicht liegt es an Selection? Ich kann aber nicht mit Range)), !
sonst gib mal deinen Code rüber.
Mit freundlichen Grüßen
Albrecht

Anzeige
AW: Tab n. Word m Tab. Schrift än.d..
28.02.2013 10:47:55
ing.grohn
Hallo Marco,
probier mal:

With doc.Tables(2)
.Range.Font.Size = 8             'ganze Tabelle in Schriftgröße 8
.Cell(5, 3).Range.Font.Size = 20 'Zelle(zeile5,spalte3) auf 20 Pkt
End With

mfG
Albrecht

AW: Tab n. Word m Tab. Schrift än.d..
28.02.2013 23:28:13
Marco
Hallo Albrecht,
habe nun mit Deiner Hilfe geschafft, dass ich in der 1. Tabelle die Schriftgröße anpassen konnte...super...
Als zweites habe ich geschafft, die gesamte Tabellenbreite der 1. Tabelle anzupassen...hier der Code:
With doc.Tables(1)
.Range.Font.Size = 7.5 'ganze Tabelle in Schriftgröße 7.5
.Columns(1).Width = (110)
End With

Wie kann ich aber jede einzelne Spalte der Tabelle ( insgesamt 3 Spalten ) eine Breite zuweisen?
Ich habe 27 Tabellen die ich so formatieren müsste. Muss ich den Code für jede einzelne Tabelle anlegen, oder geht das auch in einem Ruck?
Was mir auch noch fehlt...die Zeilenhöhe!
Aber erstmal herzlichen Dank für Deine Hilfe...ist ja nicht selbstverständlich, dass einem so geholfen wird.
MfG
Marco

Anzeige
AW: Tab n. Word m Tab. Schrift än.d..
01.03.2013 13:59:13
ing.grohn
Hallo Marco,
hier was zum testen:

With doc.Tables(2) 'Tabelle "1." auf 90% kürzen
.PreferredWidthType = wdPreferredWidthPercent
.PreferredWidth = 80
.Range.Font.Size = 8                   'ganze Tabelle in Schriftgröße 8
.Cell(5, 3).Range.Font.Size = 10       'Zelle(zeile5,spalte3) auf 20 Pkt
.Rows.HeightRule = wdRowHeightAtLeast  'ganze Tabelle Zeilenhöhe 0,8 Zoll
.Rows.Height = CentimetersToPoints(0.8)
.Cell(5, 3).Height = CentimetersToPoints(0.4) 'zeile 5 0,4 Zoll
'aktuelle Spalte 2 Zoll (hier 1)
.Columns.SetWidth ColumnWidth:=InchesToPoints(2), RulerStyle:=wdAdjustProportional
'zelle 6,3) verändern
.Cell(6, 3).SetWidth ColumnWidth:=InchesToPoints(3), RulerStyle:=wdAdjustProportional
End With

aufpassen Breite der Tabelle und Spaltenbreite beeinflussen sich!
Mit freundlichen Grüßen
Albrecht

Anzeige
AW: Tab n. Word m Tab. Schrift än.d..
01.03.2013 21:42:45
Marco
Hallo Albrecht,
mit diesem Code sieht schon mal eine Zeile der 1.Tabelle nicht schlecht aus:
With doc.Tables(1)
.Range.Font.Size = 7.5 'ganze Tabelle in Schriftgröße 7.5
.Rows.Height = (12)
.Cell(5, 1).SetWidth ColumnWidth:=(142), RulerStyle:=wdAdjustProportional
.Cell(5, 2).SetWidth ColumnWidth:=(20), RulerStyle:=wdAdjustProportional
.Cell(5, 3).SetWidth ColumnWidth:=(20), RulerStyle:=wdAdjustProportional
End With

Nur wie bekomm ich jetzt alle Zeilen der 1. Tabelle so hin?
Und dann sind ja noch weitere 27 Tabellen, die ich so formatieren müsste...
MfG
Marco

AW: Tab n. Word m Tab. Schrift än.d..
02.03.2013 09:34:59
ing.grohn
Hallo Marco,

Set oTable = doc.Range.Tables(3)
oTable.AllowAutoFit = False
For Each col In oTable.Columns
col.Width = 50             'alle Spalten auf 50 pkt
Next
oTable.Columns(3).Width = 150 'spalte 3 auf 150 pkt
For Each col In oTable.Columns
Debug.Print col.Width
Next

mfG
Albrecht

AW: Tab n. Word m Tab. Schrift än.d..
02.03.2013 23:14:29
Marco
Hallo Albrecht,
vielen Dank für deine Mühe...ich habe es jetzt ein bisschen anders gelöst und es funktioniert,auch wenn die Formatierung etwas länger dauert...aber keine Ahnung, ob es so richtig ist...
Hier der Code:
With doc.Tables(1) 'Tabelle 1 anpassen
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row  'Schleife für Anpassen der Spalten
.Range.Font.Size = 7.5 'ganze Tabelle Schriftgröße 7.5
.Rows.Height = (12) 'ganze Tabelle Zeilenhöhe 12
.cell(i, 1).SetWidth ColumnWidth:=(142), RulerStyle:=wdAdjustProportional 'anpassen Spalte 1
.cell(i, 2).SetWidth ColumnWidth:=(20), RulerStyle:=wdAdjustProportional  'anpassen Spalte 2
.cell(i, 3).SetWidth ColumnWidth:=(20), RulerStyle:=wdAdjustProportional  'anpassen Spalte 3
Next
End With

Da ich ja nicht nur eine Tabelle habe, sondern 27 an der Zahl, müsste es doch irgendwie jetzt mit einer Schleife funktionieren, so dass ich den Code nicht für jede Tabelle einzeln wiederholen muss, oder?
Ich habe irgendwie keinen Lösungsansatz dafür gefunden...weisst Du Rat?
MfG
Marco

AW: Tab n. Word m Tab. Schrift än.d..
03.03.2013 07:16:19
ing.grohn
Hallo Marco,
warum benutzt du nicht einfach oTable.Columns(1), ..(2).../3).. für die Splatenbreite der Tabelle. Das wären 3 Zeilen pro Tabelle?
die Zeilen .Range.Font.Size = 7.5 und .Rows.Height = (12) gehören natürlich vor die For-Schleife (du willst doch nich zigmal die Schrift der Tabelle und die Zeilenhöhe ändern, einmal reicht!
einen schönen Sonntag
mfg
Albrecht

AW: Tab n. Word alle Tab
03.03.2013 08:00:31
ing.grohn
Hallo Marco,
probier mal:

Sub Tabelle_to_Word()
Dim wDoc As Word.Document
Dim ws As Excel.Worksheet
Dim tb As Word.Table
Dim i As Integer
Set wDoc = GetObject("dokument9") 'oder so
i = 1
For Each ws In Worksheets   'hier aktuelles Workbook
If Left(ws.Name, 4) = "Test" Then
ws.UsedRange.Copy
With wDoc.Application.Selection
.TypeText Text:="Tabelle " & i
.TypeParagraph
.PasteExcelTable False, False, False
.TypeParagraph
.TypeParagraph
End With
i = i + 1
End If
Next
For Each tb In wDoc.Tables
With tb
.AllowAutoFit = False
.Range.Font.Size = 8
.Rows.Height = (12)
.Columns(1).Width = 55
.Columns(2).Width = 55
.Columns(3).Width = 100
End With
Next
Set tb = Nothing
Set wDoc = Nothing
Set ws = Nothing
End Sub

mfG
Albrecht

AW: Tab n. Word alle Tab
03.03.2013 22:06:29
Marco
Hallo Albrecht,
das mit der Formatierung funzt schon mal...super !!!
Mit dem Code zum Einfügen in Word, werde ich wohl jedes Sheet einzeln machen müssen, da ich insgesamt (in 2 Kategorien aufgeteilt) 42 Tabellen habe, und nur 27 davon in Word kopieren möchte.
Diese 27 Sheets tragen die Namen "A, B, C..bis Z" und "0".
Bisher habe ich Deinen Code verwendet ( Beispiel für Sheet "A":
Dim wsa As Object
Set wsa = ThisWorkbook.Sheets("A")
wsa.UsedRange.Copy
.PasteExcelTable False, False, False
.TypeParagraph
Set wsa = Nothing
Vielleicht lässt es sich ja trotzdem abkürzen, aber mir fällt absolut nichts dazu ein...wo ich ja auch nur ein Anfänger in Sachen VBA bin.
Hätte da noch eine andere Frage: Lässt sich irgendwie der Zeilenumbruch (.TypeParagraph) auch formatieren?..Der Abstand zwischen den Tabellen ist ein bisschen zu groß, da Word den Standard ( Tahoma, Schriftgröße 12)nimmt, und ich lieber Arial und Schriftgröße 7.5 nehmen möchte...so wie für die Formatierung der Tabellen.
MfG...und einen schönen Sonntag Abend
Marco

34 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige