Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Auslesen von Werten für eine For-Next-Schleife

Begonnen von MaxP, November 08, 2023, 16:11:47

⏪ vorheriges - nächstes ⏩

MaxP

Hallo zusammen,

ich habe einen Code erstellt, der in Word eine Serienbrief-Vorlage öffnet, die Feldverknüpfungen aufhebt und sie als .doc speichert. Vorher werden die entsprechenden Pfade zusammen gebastelt. Das funktiniert so weit.

Die benötigten Pfade der 20-30 Word-Dateien bzw. deren IDs befinden sich in einer einfachen Tabelle (tbl_Doku: ID (AutoWert), Proj_ID, Doku_ID). Die komplette Liste aller Pfade befinden sich in einer Nachschlagetabelle (tbl_TXTPfadeNeu: Txt_ID, Txt_Pfad).

Deshalb möchte ich in diesem Code eine For-Next-Schleife oder auch eine andere Schleife einbauen. Der Schleifenzähler z.B. i soll sich die Werte aus der Tabelle/Abfrage holen. Wie das funktioniert, weiß ich allerdings nicht.

Hier der bisherige Code:
    Dim Pfad1, Pfad2, Pfadx, QPfad, ZPfad As String
    Dim i as Integer
    Dim Word As Object
   
    Pfad1 = DLookup("[txt_Pfad]", "[tbl_TXTPfadeNeu]", "[TXT_ID] = 1") 'fester Pfad
    Pfad2 = DLookup("[txt_Pfad]", "[tbl_TXTPfadeNeu]", "[TXT_ID] = 2") 'fester Pfad
   
    Pfadx = DLookup("[txt_Pfad]", "[qry_Doku]", "[Doku_ID] = 8") 'variabler Pfad
   
    QPfad = Pfad2 & Pfadx & ".dot""" 'vollständiger Quellpfad
    ZPfad = Pfad1 & Pfadx & ".doc""" 'vollständiger Zielpfad
    'Debug.Print QPfad; ZPfad
       
    Set Word = CreateObject("Word.Application")

For i ...
   
   With Word
   '.Visible = True
   .Documents.Add QPfad
   .Application.Run "Normal.NewMacros.Felder_aufheben"
   .ActiveDocument.SaveAs ZPfad
   .ActiveDocument.Close
   End With

Next i

Beim PFADX sollte eine Abfrage als Quelle benannt werden. Außerdem müsste die 8 eine entsprechende Variable erhalten.
Win 10 pro 64 bit, Access 2003

MaxP

Win 10 pro 64 bit, Access 2003

PhilS

Zitat von: MaxP am November 09, 2023, 17:55:23Keiner eine Idee?
Ich verstehe nicht was du eigentlich vor hast.

Zitat von: MaxP am November 08, 2023, 16:11:47Deshalb möchte ich in diesem Code eine For-Next-Schleife oder auch eine andere Schleife einbauen. Der Schleifenzähler z.B. i soll sich die Werte aus der Tabelle/Abfrage holen.
[....]
Beim PFADX sollte eine Abfrage als Quelle benannt werden. Außerdem müsste die 8 eine entsprechende Variable erhalten.
Welche Tabelle? Wie soll daraus der Schleifenzähler geholt werden?
Was soll denn die Schleife treiben? Die Daten aus der Tabelle oder die Word-Dateien im Dateisystem?
Die 8? - Die sehe ich zwar, aber was ist das und wo kommt der Wert her?

Die Zusammenhänge sind für mich bisher nicht nachvollziehbar.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MaxP

Hallo,

sorry, dass ich so unpräzise gepostet habe.

Der Code ist erforderlich, um div. Informationen aus zahlreichen Abfragen in div. Word-Serienbriefen zu übertragen, die dann wiederum in einem finalen Haupdokument eingefügt werden. Ein AC-Bericht kommt wegen unzureichender Formatierung hierfür nicht in Frage.

Da der Code momentan zu Testzwecken nur ein einzelnes Dokument behandelt (ID = '8'), müsste der Code so häufig wiederholt werden, bis alle ausgewählten DS bzw. Pfade (= Word-Dokumente) aus der Abfrage qry_Doku abgearbeitet sind.

Dazu müsste die ID aus qry_Doku an i der Schleife übertragen werden. (mit Hilfe eines Recordsets o.ä.??)

Gruß
Max
Win 10 pro 64 bit, Access 2003

PhilS

Zitat von: MaxP am November 10, 2023, 09:59:38Dazu müsste die ID aus qry_Doku an i der Schleife übertragen werden. (mit Hilfe eines Recordsets o.ä.??)
Wenn alle Datensätze aus qry_Doku verarbeitet werden sollen, spielt die ID dabei keine Rolle.

Hier mal ein grob skizziertes Beispiel, wie der Code anstelle deines For i ... / Next i Blocks aussehen könnte.
    Dim db As DAO.Database
    Set db = CurrentDb
    Dim rs As DAO.Recordset
    Set rs = db.OpenRecordset("SELECT * FROM qry_Doku")
   
    Do Until rs.EOF
        Pfadx = rs.Fields("txt_Pfad").Value
        QPfad = Pfad2 & Pfadx & ".dot" 'vollständiger Quellpfad
        ZPfad = Pfad1 & Pfadx & ".doc" 'vollständiger Zielpfad
   
        With Word
            '.Visible = True
            .Documents.Add QPfad
            .Application.Run "Normal.NewMacros.Felder_aufheben"
            .ActiveDocument.SaveAs ZPfad
            .ActiveDocument.Close
        End With
   
        rs.MoveNext
    Loop
    rs.Close


Nebenbei: Deine Deklaration der Pfad-Variablen ist nicht ganz korrekt. Wenn nicht pro Variable der Datentyp explizit angegeben wird, sind alle Variablen bis auf die letzte vom Typ Variant.
So müsste es aussehen um explizit String-Variablen zu deklarieren.
    Dim Pfad1 As String, Pfad2 As String, Pfadx As String, QPfad As String, ZPfad As String
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MaxP

Hallo,

dein Beispiel funktioniert, wie es soll. Super!
Und ist auch gar nicht sooo kompliziert.
Die Deklaration habe ich auch entsprechend geändert.
Noch mal danke!

Gruß
Max
Win 10 pro 64 bit, Access 2003