For Schleife mit If Abfrage

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
InputBox MsgBox
Bild

Betrifft: For Schleife mit If Abfrage
von: Kenji
Geschrieben am: 03.12.2015 04:40:04

Hallo zusammen,
ich habe "mal wieder" eine Schwierigkeit zu bewältigen, wo Ihr mir hoffentlich weiterhelfen könnt.
Zuerst einmal mein bisheriger Code:

Sub Schreiben()
Dim Eingabe As Variant
Dim Tabelle
Dim wrdApp As Object
Dim wrdDoc As Object
Dim dateipfad As String
Set Tabelle = ThisWorkbook.Worksheets("Tabelle")
Do
  Zeile = Application.InputBox(prompt:="Bitte die Zeile eingeben, aus der das Dokument  _
generiert werden soll!", Title:="Eingabe Zeile", Default:="", Type:=1)
  If VarType(Zeile) = vbBoolean Then Exit Do
    If Zeile <= 10000 And Zeile >= 3 Then
    
    If Tabelle.Cells(Zeile, 11).Value = "" Then
    MsgBox "Das Feld bla ist nicht ausgewählt. Ein Schreiben kann nicht erstellt werden", 16, " _
Warnung"
    Exit Do
    Else
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Open("U:\Anschreiben.docm")
    End If
    
    For i = Tabelle.Cells(Zeile, 8) To Tabelle.Cells(Zeile, 9) Step 1
    
    wrdDoc.FormFields("Text1").Result = Tabelle.Cells(Zeile, 38).Value
    wrdDoc.FormFields("Text2").Result = Tabelle.Cells(Zeile, 39).Value
    wrdDoc.FormFields("Text3").Result = Tabelle.Cells(Zeile, 40).Value
    wrdDoc.FormFields("Text4").Result = Tabelle.Cells(Zeile, 41).Value
    
    wrdDoc.FormFields("Text5").Result = Tabelle.Cells(Zeile, 42).Value
    wrdDoc.FormFields("Text6").Result = Tabelle.Cells(Zeile, 43).Value
    wrdDoc.FormFields("Text7").Result = Tabelle.Cells(Zeile, 44).Value
    
    wrdDoc.FormFields("Text8").Result = i
    
    wrdDoc.FormFields("Text9").Result = Tabelle.Cells(Zeile, 10).Value
    
    wrdDoc.FormFields("Text10").Result = Tabelle.Cells(Zeile, 46).Value
    wrdDoc.FormFields("Text11").Result = Tabelle.Cells(Zeile, 47).Value
    
    wrdDoc.FormFields("Text12").Result = Tabelle.Cells(Zeile, 11).Value
    wrdDoc.FormFields("Text13").Result = Tabelle.Cells(Zeile, 48).Value
    
    wrdDoc.FormFields("Text14").Result = Tabelle.Cells(Zeile, 10).Value
 
    dateipfad = "L:\"
 
    wrdDoc.ExportAsFixedFormat OutputFileName:=dateipfad & "\" & Tabelle.Cells(Zeile, 42).Value  _
& " " & Tabelle.Cells(Zeile, 43).Value & " " & Tabelle.Cells(Zeile, 44).Value & " - " & "0000" & " - " & Format(Now, "DD.MM.YYYY") & ".pdf", _
    ExportFormat:=17, OpenAfterExport:=True, OptimizeFor:= _
    wdExportOptimizeForPrint, Range:=wdExportAllDocument, _
    Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
    CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
    BitmapMissingFonts:=True, UseISO19005_1:=False
 
    wrdApp.Quit savechanges:=wdDoNotSaveChanges
    Set Tabelle = Nothing
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
 
    Next i
 
    Exit Do
    End If
    MsgBox "Fehler! In der genannten Zeile fehlen Werte oder es handelt es sich um eine nicht  _
existierende oder komplett leere Zeile!", 16, "Warnung"
    Loop
    End Sub
So nun zu dem eigentlichen Problem. Das Makro läuft in einer Excel Datei, dass die Word Dokumente in einer Schleife produzieren soll und zwar abhängig von 2 Zellen in jeder Spalte.
Beispiel:
Zelle A = 468
Zelle B = 470
Nun soll das Makro nacheinander 3 Dateien erstellen. Die erste Datei beinhaltet Nummer 468, die _ zweite Datei 469 und die dritte Datei 470. Mit der ersten Datei klappt das auch, aber sobald er die zweite Datei machen soll bricht das Makro mit der Meldung "Objektvariable oder With-Blockvariable nicht festgelegt" ab. Im Makro selber wird die Zeile

wrdDoc.FormFields("Text1").Result = Tabelle.Cells(Zeile, 38).Value
gelb markiert.
Das ist allerdings nur der erste Schritt, der funktionieren soll. Nun kann es aber vorkommen, dass in Zelle B nichts drinsteht. Wenn dem der Fall ist bricht das Makro sofort ab, da die For Schleife nicht bei beiden Variablen Inhalt hat. Wie kann ich das, vielleicht mit einer IF Schleife, abfangen?
Wäre klasse, wenn mir da jemand auf die Spünge helfen kann.
Grüße
Kenji

Bild

Betrifft: AW: For Schleife mit If Abfrage
von: fcs
Geschrieben am: 03.12.2015 08:19:42
Hallo Kenji,
Fehler "Objektvariable oder With-Blockvariable nicht festgelegt":
du musst die Zeile

    Set Tabelle = Nothing

löschen oder verschieben vor die Zeile End Sub
Wie kann ich das, vielleicht mit einer IF Schleife, abfangen?

Prüfung an der logisch korrekten Stelle einbauen und dann per
Goto Weitermachen oder mit einer Exit For oder Exit Do
an der passenden Zeile das Makro weiter ausführen.
Gruß
Franz

 Bild

Beiträge aus den Excel-Beispielen zum Thema "For Schleife mit If Abfrage"