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
Inhaltsverzeichnis

Problem mit For Next Schleife

Problem mit For Next Schleife
27.04.2023 18:37:08
Mario

Hallo zusammen,

ich habe eine Tabelle mit mehreren 100 Zeilen und vielen Spalten.
Ich soll eigentlich 100erte Word Dokumente mit Inhalten per Copy und paste füllen.
Also habe ich mir eine Word Vorlage gebastelt und 3 Felder mit Textmarken bestückt, die auch problemlos aus der Tabelle gespeist werden.

In Spalte D habe ich jedoch Unterpunkte, die ich am Anfang jeder Word Datei schreiben will. Das klappt auch, aber leider immer in die nächste abzuspeichernde Datei mit dem Dateinamen der nächsten Bezeichnung?

Ich habe wohl einen Fehler in der for next Schleife und wäre sehr dankbar, wenn jemand mal über meinen Code blicken könnte. Ich verzweifle langsam, denn ich komme nicht drauf, wo der Fehler liegen könnte.

Hier ein Ausschnitt aus der Tabelle:
A B C D
PPSNummer Bezeichnung Zustaendigkeit AktAA
01.04.15 Kundenbetreuung XXX
1.01.100 Ereignissystem
1.01.200 Kalendersystem

01.05.15 Kasse / Sorten / Edelmetalle ORG
1.05.150 Kassenverkehr
1.02.134 Alte Anweisung


01.06.15 Immobilienvermittling/-vermietung IMM
1.06.150 Immobilienvermittlung

Hier der Code:

Sub VorlageSpeichern()
  
    Dim wrdApp As Object
    Dim wrdDoc As Object
    Dim PPSNummer As String
    Dim Bezeichnung As String
    Dim Zustaendigkeit As String
    Dim Dateiname As String
    Dim Speicherpfad As String
    Dim AktAA As String
   
   
    'Dateipfad zur Word-Vorlage
    Const VorlagePfad As String = "U:\Eigene Dateien\UHB Test\3_UHB-Blanko-Vorlage-Test2.docx"
    Const wrdProperty As Integer = 1
  
    'Ordnerpfad zum Speichern der neuen Dateien
    Speicherpfad = "U:\Eigene Dateien\UHB Test\UHB\"
  
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
   
    
    'Schleife durch die Zeilen in der Tabelle
   ' For i = 2 To ThisWorkbook.Sheets("1. Serie").Range("A" & Rows.Count).End(xlUp).Row
       For i = 2 To 35 'nur 25 Zeilen
      
       
        'Werte auslesen
        AktAA = ThisWorkbook.Sheets("1. Serie").Range("S" & i).Value
        PPSNummer = ThisWorkbook.Sheets("1. Serie").Range("A" & i).Value
        Bezeichnung = ThisWorkbook.Sheets("1. Serie").Range("B" & i).Value
        Zustaendigkeit = ThisWorkbook.Sheets("1. Serie").Range("H" & i).Value
      
        
         'Word Vorlage öffnen
       Set wrdDoc = wrdApp.Documents.Open(VorlagePfad, ReadOnly:=False)
      
       ''Neu:
       Set wrdRange = wrdDoc.Range(0, 0)
      
        
        ' Wenn Zuständigkeit Leer
       
        If Zustaendigkeit = "" Then
       
        'schaue nach, ob es alte AAs gibt
        ' Leerzeilen vermeiden
        If AktAA > "" Then
       
            wrdRange.Text = AktAA
            wrdRange.InsertParagraphAfter
       
         End If
        
         Else
       
        'Word Bookmarks füllen
        wrdDoc.Bookmarks("PPSNummer").Range.Text = PPSNummer
        wrdDoc.Bookmarks("Bezeichnung").Range.Text = Bezeichnung
        wrdDoc.Bookmarks("Zust").Range.Text = Zustaendigkeit
   
                   
    'Dateinamen zusammenstellen
        Dateiname = PPSNummer & " " & Bezeichnung & ".docx"
       
    'Speicherpfad und Dateiname kombinieren
        Dateiname = Speicherpfad & Dateiname
       
        'Dokument unter dem neuen Dateinamen speichern
        wrdDoc.SaveAs2 Filename:=Dateiname, FileFormat:=wdFormatXMLDocument
        wrdDoc.Close True
      
        End If
      
 
      
    Next i
 
 
    'wrdDoc.Close True
    wrdApp.Quit
  
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
  
    MsgBox "Die Word-Vorlage wurde für alle Zeilen gespeichert.", vbInformation
  
End Sub


Vielen Dank für Eure Hilfe.
Wenn noch Informationen gebraucht werden, gerne einfach sagen.

PS: Ich bin überhaupt kein Programmierer, habe aber aus einem früheren Leben noch ein paar Excel und VBA Kenntnisse :)

VG Mario

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit For Next Schleife
27.04.2023 18:39:15
Mario
Hier noch ein Auszug der Tabelle zum besseren Verstädnis.
VG Mario


AW: Problem mit For Next Schleife
28.04.2023 00:26:25
Yal
Hallo Mario,

der Tipp: achte auf dein Einrücken!
So hättest Du gemerkt, dass Du die Datei innerhalb des "If" schliesst. Also je nachdem ob Zustaendigkeit befüllt ist oder nicht.

Verwende die Anbindung der Bibliothek. In VB-Editor unter Menü "Extras", "verweise..." so hast Du IntelliSense zur Verfügung und Du kannst die Objekt-Variablen typisiert deklarieren.

Leere Zeile helfen die Lesbarkeit nur, wenn sie sparsam angewendet werden. Nutze das Einrücken der Kommentar um "Kapitel" zu erzeugen. Kommentieren ist gut, aber kommentiere nicht, was selbstredent ist. Anstatt "'schaue nach, ob es alte AAs gibt" (steht eh im Code), schreibe lieber warum. Das weisst Du in einem Jahr nicht mehr. (ok: das war vermutlich ein Kommentar für den Forum)

Sub VorlageSpeichern()
'unter Anbindung der Library "Micorsoft Word Object 19.0 Library" (VB_Editor: "Extras", "Verweise...")
Dim wrdApp As New Word.Application
Dim wrdDoc As Word.Document
Dim AktAA As String
Dim PPSNummer As String
Dim Bezeichnung As String
Dim Zustaendigkeit As String
Dim Dateiname As String
    
Const VorlagePfad = "U:\Eigene Dateien\UHB Test\3_UHB-Blanko-Vorlage-Test2.docx"
Const Speicherpfad = "U:\Eigene Dateien\UHB Test\UHB\"
  
    wrdApp.Visible = True
   
'Schleife durch die Zeilen in der Tabelle
    ' For i = 2 To ThisWorkbook.Sheets("1. Serie").Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To 35 'nur 25 Zeilen
    'Werte auslesen
        With ThisWorkbook.Sheets("1. Serie")
            AktAA = .Range("S" & i).Value
            PPSNummer = .Range("A" & i).Value
            Bezeichnung = .Range("B" & i).Value
            Zustaendigkeit = .Range("H" & i).Value
        End With
    'Word Vorlage öffnen
        Set wrdDoc = wrdApp.Documents.Open(VorlagePfad, ReadOnly:=False)
    'Neu:
        Set wrdRange = wrdDoc.Range(0, 0)
    ' Wenn Zuständigkeit Leer
        If Zustaendigkeit = "" Then
        'schaue nach, ob es alte AAs gibt
            If AktAA > "" Then
                wrdRange.Text = AktAA
                wrdRange.InsertParagraphAfter
            End If
        Else
        'Word Bookmarks füllen
            wrdDoc.Bookmarks("PPSNummer").Range.Text = PPSNummer
            wrdDoc.Bookmarks("Bezeichnung").Range.Text = Bezeichnung
            wrdDoc.Bookmarks("Zust").Range.Text = Zustaendigkeit
        End If
    'Dokument unter dem neuen Dateinamen speichern
        Dateiname = Speicherpfad & PPSNummer & " " & Bezeichnung & ".docx"
        wrdDoc.SaveAs2 Filename:=Dateiname, FileFormat:=wdFormatXMLDocument
        wrdDoc.Close True
    Next i
'Aufräumen
    wrdApp.Quit
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
    MsgBox "Die Word-Vorlage wurde für alle Zeilen gespeichert.", vbInformation
End Sub
VG
Yal


Anzeige
AW: Problem mit For Next Schleife
28.04.2023 07:44:28
Mario
Hallo Yal,

vielen Dank für Deine Antwort.
Jetzt sieht der Code natürlich viel besser aus.

Leider war ich aber auch schon genauso weit. Jetzt passiert nämlich folgendes:

Die Word Datei wird je Excel Zeile geöffnet und die Daten werden überschrieben. Das hat zur Folge, dass immer nur die letzte Zeile der Spalte im Dokument steht und nicht alle Zeilen untereinander. Ausserdem werden die Werte PPSNummer, Bezeichnung und Zuständigkeit teilweise gar nicht geschrieben.

Mein Code war also gar nicht so verkehrt, nur dass eben das Word Dokument den falschen Namen bekommen hatte.

VG Mario


Anzeige
AW: Problem mit For Next Schleife
28.04.2023 12:16:01
Yal
Würdest Du die Lösung hier posten, sodass Fragende mit ähnlicher Frage auch hier die Lösung finden können?
Ich kann in den gegebenen Link keine nachvollziehbare Lösung finden.

Vielen Dank & Grüße
Yal


300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige