Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
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
aus Excel Tabellen in Word erstellen
04.05.2023 16:23:10
krug96

Hallo,

ich hatte schon einmal das Thema "aus Excel mit VBA Tabellen in Word erstellen" hier eingestellt - Liegt jetzt schon im Archiv.
Inzwischen habe ich schon ein bisschen was hinbekommen: die Worddatei wird angelegt und eine Tabelle mit den entsprechenden Formatierungen wird erstellt.
Wahrscheinlich könnte man das auch noch optimieren. Ich bin aber froh, dass ich soweit schon gekommen bin.

Jetzt die Frage:
1.) wie kann man die eine Tabelle nach dem Erzeugen kopieren und zwar so oft, wie in der Listbox Einträge markiert sind?
2.) Wie kann man die passenden Daten und zwar in Abhängigkeit der gewählten Einträge in der Listbox1 aus der Datei "Daten.xlsx" in die Tabellen eintragen?

Ich wäre euch dankbar, wenn Ihr euch das mal anschauen könntet.

Gruß
Michael

https://www.herber.de/bbs/user/159046.zip

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: aus Excel Tabellen in Word erstellen
05.05.2023 10:27:02
Jowe
Hallo Michael,
woran genau machst Du die Anzahl der zu erzeugenden Tabellen fest?
Gruß
Jochen


AW: aus Excel Tabellen in Word erstellen
05.05.2023 11:19:35
krug96
Hallo Jochen,

dafür habe ich die folgende Abfrage bei ListBox1.Change eingebaut:


        For ix1 = 0 To .ListBox1.ListCount - 1
            If .ListBox1.Selected(ix1) = True Then
                iSelCnt1 = iSelCnt1 + 1
            End If
        Next ix1
        .Label2.Caption = iSelCnt1
Gruß
Michael


AW: aus Excel Tabellen in Word erstellen
05.05.2023 12:13:25
Jowe
Hallo Michael,

ok, dann hab ich es.

Ich bin der Ansicht, dass es einfacher gewesen wäre, die Word-Vorlage mit einer perfekt formatierten Tabelle zu versorgen, wenn man sowieso eine Vorlage nutzen will. Das Kopieren der vorhandenen Tabelle in der erforderlichen Anzahl im neu auf Basis einer Vorlage erzeugten Word-Dokument wäre so aber schneller. Das Übertragen der Daten ginge jedoch genau gleich. Das trifft auch auf das Übertragen der Daten in die diversen Tabellen zu. Weiter verstehe ich nicht welchen Sinn die Textmarke in der Vorlage hat, die wird nicht genutzt, sondern lediglich einmal auf ihr Vorhandensein geprüft.

Aber ok, ich habe Deine XLSM nach Deinen Vorgaben erweitert/modifiziert und auch Deine Word-Vorlage etwas verändert.
Siehe dazu die Inhalte des angehängten ZIP-Files: https://www.herber.de/bbs/user/159061.zip

Gruß
Jochen


Anzeige
AW: aus Excel Tabellen in Word erstellen
05.05.2023 13:02:46
krug96
Hallo Jochen,

erst einmal ziehe ich den Hut vor Dir.
Vielen Dank für die Umsetzung.

Ich habe mir das Ergebnis angeschaut und genau so wollte ich es haben.

Das mit der Textmarke kann ich aufklären: Die wird nicht nur abgefragt, sondern an dieser Textmarke soll dann mit dem erzeugen der Tabellen beginnen. Dazu habe ich die folgende Code-Zeile noch eingefügt, jedoch hier online war das noch nicht eingebaut.

   'Tabelle erzeugen
   If wrdApp.ActiveDocument.Bookmarks.Exists("TabelleEinfuegen") Then
     With wrdApp
'--->        .Selection.GoTo What:=wdGoToBookmark, Name:="TabelleEinfuegen"
       .ActiveDocument.Tables.Add Range:=wrdApp.Selection.Range, _
       NumRows:=10, NumColumns:=4, _
       DefaultTableBehavior:=wdWord9TableBehavior, _
       AutoFitBehavior:=wdAutoFitFixed
       .Selection.HomeKey Unit:=wdStory
       .Selection.Delete Unit:=wdCharacter, Count:=1
     End With
Für das Übertragen der Daten in die einzelnen Tabellen hast Du die Beispielwerte verwendet.
Wie müsste das denn aussehen, wenn das Ausfüllen in Abhängigkeit der gewählten ListBox-Einträge durchgeführt werden soll?

Welche Veränderungen hast Du an der Word-Vorlage vorgenommen?

Vielen Dank schonmal für eine kurze Rückmeldung.

Gruß
Michael


Anzeige
AW: aus Excel Tabellen in Word erstellen
05.05.2023 13:28:18
krug96
Hallo Jochen,

ich habe mir auch mal den Vorschlag von Dir - eine fertige Tabelle in der Vorlage zu haben - an geschaut und versucht umzusetzen.
Das kopieren klappt, jedoch das befüllen dann nicht mehr. Da kommt an dieser Stelle "With wrdApp.ActiveDocument.Tables(AnzTb)" eine Fehlermeldung.


'   'Tabelle erzeugen
'   If wrdApp.ActiveDocument.Bookmarks.Exists("TabelleEinfuegen") Then
'     With wrdApp
'        .Selection.GoTo What:=wdGoToBookmark, Name:="TabelleEinfuegen"
'       .ActiveDocument.Tables.Add Range:=wrdApp.Selection.Range, _
'       NumRows:=10, NumColumns:=4, _
'       DefaultTableBehavior:=wdWord9TableBehavior, _
'       AutoFitBehavior:=wdAutoFitFixed
'       .Selection.HomeKey Unit:=wdStory
'       .Selection.Delete Unit:=wdCharacter, Count:=1
'     End With
'
'     'Tabelle formatieren
'     If wrdApp.ActiveDocument.Tables.Count  1 Then
'       MsgBox "Es gibt keine Tabellen im Word-Dokument.", vbMsgBoxSetForeground + vbExclamation, "Hinweis"
'       Exit Sub
'     Else
'       With wrdApp.ActiveDocument.Tables(1)
'         If .Style > "Tabellenraster" Then
'           .Style = "Tabellenraster"
'         End If
'         .ApplyStyleHeadingRows = True
'         .ApplyStyleLastRow = False
'         .ApplyStyleFirstColumn = True
'         .ApplyStyleLastColumn = False
'         .ApplyStyleRowBands = True
'         .ApplyStyleColumnBands = False
'
'         'formatierung
'         'Zellen miteinander verbinden
'         .Cell(1, 2).Merge MergeTo:=.Cell(1, 3)
'         .Cell(2, 2).Merge MergeTo:=.Cell(2, 3)
'         .Cell(3, 2).Merge MergeTo:=.Cell(3, 3)
'         .Cell(4, 2).Merge MergeTo:=.Cell(4, 3)
'         .Cell(5, 2).Merge MergeTo:=.Cell(5, 3)
'
'         'Schrifttyp und Art der Zellen
'         .Cell(1, 1).Range.Words(1).Bold = True                  'Feld für LfNr
'         .Cell(1, 2).Range.Words(1).Bold = True                  'Feld für Header1
'         .Cell(1, 2).Range.Characters(1).Italic = True
'         .Cell(1, 3).Range.Words(1).Bold = True                  'Feld für Punkte
'         .Cell(2, 2).Range.Words(1).Bold = True                  'Feld für Header2
'         .Cell(2, 2).Range.Characters(1).Italic = True
'         For i = 1 To 3
'           .Cell(3, i).Range.Characters(1).Font.Size = 3
'           .Cell(5, i).Range.Characters(1).Font.Size = 3
'         Next i
'         For i = 1 To 3
'           .Cell(1, i).Range.Characters(1).Font.Name = "Verdana"
'           .Cell(1, i).Range.Characters(1).Font.Size = 10
'         Next i
'            .Cell(2, 2).Range.Characters(1).Font.Name = "Verdana"
'            .Cell(2, 2).Range.Characters(1).Font.Size = 10
'         For i = 5 To 10
'           .Cell(i, 2).Range.Characters(1).Font.Name = "Verdana"
'           .Cell(i, 2).Range.Characters(1).Font.Size = 10
'           .Cell(i, 3).Range.Characters(1).Font.Name = "Verdana"
'           .Cell(i, 3).Range.Characters(1).Font.Size = 10
'         Next i
'
'         'Spaltenbreiten definieren
'         'Spaltenhöhe
'         'gilt für alle Zeilen
'         .Rows(1).Height = 25
'         .Rows(2).Height = 25
'         .Rows(3).Height = 10
'         .Rows(4).Height = 30
'         .Rows(5).Height = 10
'         .Rows(6).Height = 15
'         .Rows(7).Height = 15
'         .Rows(8).Height = 15
'         .Rows(9).Height = 15
'         .Rows(10).Height = 15
'
'         'Spaltenbreite
'         'gilt für alle Zeilen
'         For i = 1 To 10
'           .Rows(i).Cells(1).Width = 35
'         Next i
'         For i = 1 To 5
'           .Rows(i).Cells(2).Width = 390                        'variabel definieren in Abhängigkeit der gesamten Tabellenbreite
'         Next i
'         For i = 6 To 10
'           .Rows(i).Cells(2).Width = 25
'         Next i
'         For i = 6 To 10
'           .Rows(i).Cells(3).Width = 365                        'variabel definieren in Abhängigkeit der gesamten Tabellenbreite
'         Next i
'         For i = 1 To 5
'           .Rows(i).Cells(3).Width = 25
'         Next i
'         For i = 6 To 10
'           .Rows(i).Cells(4).Width = 25
'         Next i
'
'         'Checkboxen einfügen
'         For i = 6 To 10
'           .Cell(i, 2).Range.ContentControls.Add (wdContentControlCheckBox)
'         Next i
'
'         'Tabelle Linien ausschalten
'         .Borders(wdBorderTop).LineStyle = wdLineStyleNone
'         .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
'         .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
'         .Borders(wdBorderRight).LineStyle = wdLineStyleNone
'         .Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone
'         .Borders(wdBorderVertical).LineStyle = wdLineStyleNone
'         .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
'         .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
'       End With
'     End If
'   End If
   
   'Tabelle kopieren (Anzahl der zu erzeugenden Tbellen)
   wrdApp.ActiveDocument.Tables(1).Range.Copy
   For Tb = 1 To iSelCnt1 - 1 'wo wird die Anzahl der zu erzeugender Tabellen festgelegt?? iSelCnt1??
     wrdApp.ActiveDocument.Tables(1).Range.Copy
     With wrdApp
       .Selection.EndKey Unit:=wdStory
       .Selection.TypeParagraph
       .Selection.TypeParagraph
       .Selection.Paste
     End With
   Next
       
   'Text einfügen
   'in Abhängigkeit von den in der ListBox gewählten Einträge sollen entsprechend die Anzahl der Tabellen erzeugt werden und dann mit
   'den Inhalten aus Daten.xlsx befüllt werden
   For AnzTb = 0 To wrdApp.ActiveDocument.Tables.Count - 1
----->      With wrdApp.ActiveDocument.Tables(AnzTb)
       .Cell(1, 1).Range.Text = "000"                         'Werte in Spalte 1 aus Daten.xlsx
       .Cell(1, 2).Range.Text = "Header1"                     'Werte in Spalte 3 aus Daten.xlsx
       .Cell(1, 3).Range.Text = "1"                           'Werte in Spalte 2 aus Daten.xlsx
       .Cell(2, 2).Range.Text = "Header2"                     'Werte in Spalte 4 aus Daten.xlsx
       .Cell(4, 2).Range.Text = "Bild"                        'Werte in Spalte 10 aus Daten.xlsx
       .Cell(6, 3).Range.Text = "Antwort 1"                   'Werte in Spalte 5 aus Daten.xlsx
       .Cell(7, 3).Range.Text = "Antwort 2"                   'Werte in Spalte 6 aus Daten.xlsx
       .Cell(8, 3).Range.Text = "Antwort 3"                   'Werte in Spalte 7 aus Daten.xlsx
       .Cell(9, 3).Range.Text = "Antwort 4"                   'Werte in Spalte 8 aus Daten.xlsx
       .Cell(10, 3).Range.Text = "Antwort 5"                  'Werte in Spalte 9 aus Daten.xlsx
     End With
   Next
Gruß
Michael


Anzeige
AW: aus Excel Tabellen in Word erstellen
05.05.2023 13:32:16
krug96
Hallo Jachen,

hab es gefunden, warum das nicht funktioniert hat.
AnzTb = habe von 0 zählen lassen :-( --> mein Fehler

Gruß


AW: aus Excel Tabellen in Word erstellen
05.05.2023 14:49:20
Jowe
Michael,

ich habe im folgenden Zip-File
https://www.herber.de/bbs/user/159068.zip
zwei Word-Vorlagen: Eine Vorlage mit fertig formatierter Tabelle und eine Vorlage ohne fertig formatierte Tabelle.
In der "WordTabellen.xlsm" findest Du im Makro "Private Sub CommandButton2_Click()" der Userform diese beiden Zeilen:
" 'GoTo TbVorlage 'die Zeile ist zu aktivieren wenn die Vorlage bereits eine Tabelle enthält "
und
" 'TbVorlage: 'die Zeile ist zu aktivieren wenn die Vorlage bereits eine Tabelle enthält "

Wenn du die Vorlage mit Tabelle verwenden willst, ist in beiden Zeilen das Hochkomma vor "Goto" zu entfernen,
Willst Du die Vorlage ohne Tabelle nutzen muss das jeweilige Hochkomma stehen bleiben.
und natürlich ist der Name der gewünschten Vorlage im Code anzupassen, dann klappts.

Was meinst Du mit Textboxen, ich sehe nur eine Listbox???

Gruß
Jochen

Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige