Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1860to1864
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
for Schleife in Word
29.12.2021 02:41:08
Tom
Guten Morgen zusammen
Ich bin auf der Suche nach einer Möglichkeit, eine "for Schleife" in einem Makro für ein Word Dokument einzubauen. Für jede Zeile in der Tabelle soll ein Eintrag auf der zweiten Seite der Vorlagendatei erstellt werden. Bis und mit der ersten Zeile bin ich gekommen, für das Erstellen der weiteren Zeilenreichen meine VBA Kenntnisse leider nicht aus. Ich bin der Meinung, dass dies mit einer VBA Schleife möglich sein sollte.
Die Einträge sollten auch entsprechend Formatiert sein --> 1.0 = Überschrift 1, 1.1 = Überschrift 2
Im Anhang sende ich die Word Vorlage und die Excel Arbeitsmappe mit dem Makro. Der Code schaut wie folgt aus:
Arbeitsmappe --> https://www.herber.de/bbs/user/150047.xlsm
Word Vorlage --> https://www.herber.de/bbs/user/150048.doc (erstelle aus diesem Dokument eine .dotx Datei)
Vielen DANK für eure Hilfe!

Sub Traktandenliste_erstellen()
Dim wdApp As New Word.Application
Dim wdDoc As Word.Document
Dim varAdd As String
Dim pathsave As String
Dim pathtrlist As String
Dim nummer As String
Dim datum As String
Dim zeit_von As String
Dim zeit_bis As String
Dim ort As String
Dim anlass As String
wdApp.Visible = True
Zeilen_Zahl = Cells(Rows.Count, "b").End(xlUp).Row
varAdd = Tabelle1.Cells(2, 1).Value
'Pfad zur Vorlagendatei
pathtrlist = Range("P4")
'Pfad zum Speichern
pathsave = Range("P2") & ("Sitzung ") & varAdd & ("\")
'Tabellenbereich  aufsteigend sortieren
Tabelle1.Range("A2:H" & Zeilen_Zahl).Sort Key1:=Range("B1:B" & Zeilen_Zahl), Order1:=xlAscending, Header:=xlYes
wdApp.Documents.Add pathtrlist
Sheets("Tabelle1").Activate
nummer = Cells(2, 1)
datum = Cells(2, 4)
zeit_von = Cells(2, 5)
zeit_bis = Cells(2, 6)
ort = Cells(2, 7)
tr1 = Cells(2, 3)
ref1 = Cells(2, 8)
zeit_von1 = Cells(2, 5)
'fügt die Werte bis und mit Traktandum 1 ein:
wdApp.ActiveDocument.Bookmarks("Nummer").Range.Text = nummer
wdApp.ActiveDocument.Bookmarks("Nummer1").Range.Text = nummer
wdApp.ActiveDocument.Bookmarks("Nummer2").Range.Text = nummer
wdApp.ActiveDocument.Bookmarks("datum").Range.Text = datum & vbNewLine
wdApp.ActiveDocument.Bookmarks("zeit_von").Range.Text = zeit_von
wdApp.ActiveDocument.Bookmarks("zeit_bis").Range.Text = zeit_bis & vbNewLine
wdApp.ActiveDocument.Bookmarks("ort").Range.Text = ort & vbNewLine
wdApp.ActiveDocument.Bookmarks("Traktandum1").Range.Text = tr1
wdApp.ActiveDocument.Bookmarks("Referent1").Range.Text = ref1
wdApp.ActiveDocument.Bookmarks("Zeit_von1").Range.Text = zeit_von1 & " Uhr" & vbNewLine
'Dokument speichern und schliessen
wdApp.ActiveDocument.SaveAs2 Filename:=pathsave & "Sitzung " & varAdd & ".docx", _
FileFormat:=wdFormatXMLDocument
wdApp.Quit
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Dies ist ein EXCEL-Forum, weißt Du..
29.12.2021 13:54:15
JoWE
Hallo Tom,
ich habe bisher auf makrogesteuertes Erstellen von Überschriften und Überschriften mit mehreren Ebenen verzichtet.
Es erschien mir einfach zu komplex und ich fand es schon mit normaler Anwendung zu kompliziert.
Mit der Google Recherche () fand ich jedoch diese Seiten:
https://github.com/MicrosoftDocs/VBA-Docs/blob/main/api/Word.ListFormat.ApplyListTemplateWithLevel.md
https://www.schreibbuero-richter.de/vba/aktuelle_kapitelnr.html
Vielleicht kann Dich davon etwas auf die Richtige Spur lotsen?
Meine Versuche hatte ich mit einem leeren Word-Dokument und via "=rand()" eingefügtem Mengentext gemacht.
Dazu hatte ich diese Makros genutzt:

Sub starten()
schritt1
schritt2
If ActiveWindow.View.SplitSpecial = wdPaneNone Then
ActiveWindow.ActivePane.View.Type = wdPrintView
Else
ActiveWindow.View.Type = wdPrintView
End If
Selection.HomeKey Unit:=wdStory
End Sub
Sub schritt1()
Set myParas = ActiveDocument.Paragraphs
ActiveDocument.Paragraphs.Style = wdStyleNormal
For x = 1 To myParas.Count
If x Mod 3 = 1 Then
myParas(x).OutlineLevel = wdOutlineLevel1
ElseIf x Mod 3 = 2 Then
myParas(x).OutlineLevel = wdOutlineLevel2
Else
myParas(x).OutlineLevel = wdOutlineLevel3
End If
Next x
ActiveDocument.ActiveWindow.View.Type = wdOutlineView
End Sub
Sub schritt2()
Set myDoc = ActiveDocument
Set myRange = myDoc.Range( _
Start:=myDoc.Paragraphs(1).Range.Start, _
End:=myDoc.Paragraphs(5).Range.End)
If myRange.ListFormat.ListType = wdListNoNumbering Then
myRange.ListFormat.ApplyListTemplate _
ListTemplate:=ListGalleries(wdOutlineNumberGallery) _
.ListTemplates(2)
End If
End Sub
Weiter bin ich aber nicht gekommen. Vielleicht kann da ja doch jemand helfen
Gruß
Jochen
Anzeige
AW: for Schleife in Word
04.01.2022 21:30:40
Dieter
Hallo Tom,
wenn ich dein Problem richtig verstehe, dann kannst du das mit dem folgenden Programm machen

Sub Traktandenliste_erstellen()
Dim wdApp As New Word.Application
Dim wdDoc As Word.Document
Dim varAdd As String
Dim pathsave As String
Dim pathtrlist As String
Dim zeile As Long
Dim nummer As String
Dim datum As String
Dim zeit_von As String
Dim zeit_bis As String
Dim ort As String
Dim anlass As String
wdApp.Visible = True
Zeilen_Zahl = Cells(Rows.Count, "b").End(xlUp).Row
'Pfad zur Vorlagendatei
pathtrlist = Range("P4")
'Pfad zum Speichern
'pathsave = Range("P2") & ("Sitzung ") & varAdd & ("\")
pathsave = Range("P2")
'Tabellenbereich  aufsteigend sortieren
Tabelle1.Range("A2:H" & Zeilen_Zahl).Sort Key1:=Range("B1:B" & Zeilen_Zahl), Order1:=xlAscending, Header:=xlYes
For zeile = 2 To Zeilen_Zahl
varAdd = Tabelle1.Cells(zeile, 1).Value
wdApp.Documents.Add pathtrlist
nummer = Cells(zeile, 1)
datum = Cells(zeile, 4)
zeit_von = Cells(zeile, 5)
zeit_bis = Cells(zeile, 6)
ort = Cells(zeile, 7)
tr1 = Cells(zeile, 3)
ref1 = Cells(zeile, 8)
zeit_von1 = Cells(zeile, 5)
'fügt die Werte bis und mit Traktandum 1 ein:
wdApp.ActiveDocument.Bookmarks("Nummer").Range.Text = nummer
wdApp.ActiveDocument.Bookmarks("Nummer1").Range.Text = nummer
wdApp.ActiveDocument.Bookmarks("Nummer2").Range.Text = nummer
wdApp.ActiveDocument.Bookmarks("datum").Range.Text = datum & vbNewLine
wdApp.ActiveDocument.Bookmarks("zeit_von").Range.Text = zeit_von
wdApp.ActiveDocument.Bookmarks("zeit_bis").Range.Text = zeit_bis & vbNewLine
wdApp.ActiveDocument.Bookmarks("ort").Range.Text = ort & vbNewLine
wdApp.ActiveDocument.Bookmarks("Traktandum1").Range.Text = tr1
wdApp.ActiveDocument.Bookmarks("Referent1").Range.Text = ref1
wdApp.ActiveDocument.Bookmarks("Zeit_von1").Range.Text = zeit_von1 & " Uhr" & vbNewLine
'Dokument speichern und schliessen
wdApp.ActiveDocument.SaveAs2 Filename:=pathsave & "Sitzung " & varAdd & ".docx", _
FileFormat:=wdFormatXMLDocument
wdApp.ActiveDocument.Close
Next zeile
wdApp.Quit
End Sub
In deiner Arbeitsmappe habe ich in Spalte A unterschiedliche Sitzungsnummern vergeben.
https://www.herber.de/bbs/user/150149.xlsm
Viele Grüße
Dieter
Anzeige

104 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige