Office: For Each Next läuft nur einmal durch

Helfe beim Thema For Each Next läuft nur einmal durch in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo Leute, ich hoffe ihr könnt mir weiter helfen... ich habe folgendes Modul erstellt: Sub VZauslesen() 'deklarieren Variablen für Dateien suchen... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von dejupp, 23. April 2023.

  1. dejupp User

    For Each Next läuft nur einmal durch


    Hallo Leute,

    ich hoffe ihr könnt mir weiter helfen... ich habe folgendes Modul erstellt:
    Code:
    Sub VZauslesen()
    
    'deklarieren Variablen für Dateien suchen
    Dim AuftragNr As String
    Dim Dateiname As String
    Dim Suchbegriff As String
    Dim Pfad As String
    
    ' Werte festlegen zum Dateien suchen
    Suchbegriff = "4975467519-00010"
    AuftragNr = Nz(DLookup("[Auftrag]", "Auftrag", "Auftrag = '" & Suchbegriff & "'"))
    Pfad = "D:\HEWA Sanierbau GmbH\Accessdatenbanken\Projektübersicht\Dateien\"
    Dateiname = Dir(Pfad & "*" & AuftragNr & "*.csv")
    
    'deklarieren Variablen für Verzeichnis auslesen
    Dim fso As New FileSystemObject
    Dim objOrdner As Object
    Dim Ordner As Object
    Dim Datei As File
    Dim intz As Integer
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objOrdner = fso.GetFolder(Pfad)
    
    'Code für Schleife für Dateien auslesen:
    'erst Bedingung, dass ein Auftrag vorhanden ist:
    If AuftragNr = "" Then
       MsgBox "Auftrag nicht gefunden"
       Else
        intz = 1
        For Each Datei In objOrdner.files
            If Datei.Name = Dateiname Then
               Debug.Print "Datei " & intz & ":" & Dateiname
            Else
               Debug.Print "Für Datei " & intz & ":" & Datei.Name & " keinen Regiebericht zum öffnen gefunden"
             End If
        intz = intz + 1
        Next Datei
    End If
    End Sub
    
    Das Ziel ist, ein bestimmtes Ordner/Verzeichnis nach Dateien zu durchsuchen, welche:
    1. mit der Endung csv versehen sind
    2. mit einer AuftragsNr (hier mal exemplarisch als "Suchbegriff" beschrieben) mitten im Dateinamen übereinstimmen (Die Auftragsnummer sucht er in einer Tabelle Auftrag mit dem ID-Schlüssel Auftrag über DLookup)
    3. zunächst im Direktfenster angezeigt werden (soll später dann weiter verarbeitet werden)

    Leider findet er immer nur die erste Datei mit Übereinstimmung, alle Anderen Dateien ignoriert er oder schreibt er als "...keinen Regiebericht zum öffnen gefunden", obwohl mehrere Dateien mit der Auftragsnummer im Namen versehen sind und mit csv enden.

    Wo liegt denn da der Fehler?

    Vielen Dank
    DeJupp
     
    dejupp, 23. April 2023
    #1
  2. andyfau
    andyfau hat Ahnung
    Hallo DeJupp,

    ich habe da mal eine Funktion gefunden, die Verzeichnisse rekursiv durchläuft:

    Code:
    Public Function ThroughAllSubfolders(ByVal P As String) 'Verweis auf Microsoft Scripting Runtime Bibliothek erforderlich
    ' Alle Dateien im Verzeichnis und der Unterverzeichnisse durchlaufen
    Dim fso As New FileSystemObject, fil As File, fol As Folder, sFol As Folder
    Dim BPfad As String
    On Error GoTo Fehler
    Set fol = fso.GetFolder(P)
    For Each fil In fol.Files
      Debug.Print P & "\" & fil.Name
     
    Next fil
     
    For Each sFol In fol.Subfolders  ' rekursiver Aufruf der Unterverzeichnisse
      ThroughAllSubfolders sFol.Path
    Next sFol
    Fehler:
     On Error GoTo 0
    End Function
    Mit Dank an den unbekannten Verfasser der Funktion
    Beste Grüße
    Andreas
     
    andyfau, 23. April 2023
    #2
  3. dejupp User
    Hallo Andreas,

    vielen Dank für deine Antwort, aber ich kann damit irgend wie nicht viel anfangen.
    Wo und wie setze ich denn die Funktion ein? In meinem Modul oder woanders?

    Vielen Dank.
    DeJupp
     
    dejupp, 24. April 2023
    #3
  4. andyfau
    andyfau hat Ahnung

    For Each Next läuft nur einmal durch

    Hallo DeJupp,
    Dein einleitender Satz
    erweckte bei mir den Eindruck, dass Du in VBA so fit bist, dass Du "Deine" Funktion mit einer Funktionierenden abgleichen und für deine Verhältnisse anpassen kannst.
    Setze den Code in ein allgemeines Modul, damit die Funktion dann mit ihrem Namen + dem Startverzeichnisname als Parameter von überall aus aufgerufen werden kann. Wenn du "Public" weg lässt, kannst Du sie in das Modul packen und dort anstatt als Funktionaufruf auch als Sub + Startverzeichnisnahme nutzen.
    Im Direktfenster des VBA-Editors listet die Routine bei Aufruf alle Verzeichnis/Dateinamen rekursiv auf, indem sie sich selbst aufruft, bis der Baum abgearbeitet ist.
    Das sollte das Schleifenproblem lösen.
    Die Variablen
    kannst Du dann ja in deinem Sinne auswerten.
     
    andyfau, 24. April 2023
    #4
  5. dejupp User
    Hallo Andreas,
    danke für deinen Beitrag. Ich habs jetzt mehrfach versucht anzupassen und auch mit Hilfe deines Codes neu zu erstellen. Nix passiert. Jetzt macht er gar nix mehr.
    Tut mir leid, aber ich komme hier nicht weiter. Gibt es denn keine Lösung, was könnte denn an meinem Code falsch sein?

    Viele Grüße und Danke schon mal.
    DeJupp
     
    dejupp, 25. April 2023
    #5
  6. Doming
    Doming hat Ahnung
    Moin,
    Du weißt, dass Du die Abarbeitung des Codes mit Stoppmarken und F8 Schritt für Schritt nachverfolgen kannst?
    Dann weißt Du, wo der Code Deine Logik verlässt ;-)
    Gruß
    Doming
     
    Doming, 25. April 2023
    #6
  7. dejupp User
    nö, das ist mir neu :-)
    wie setze ich stoppmarken?
    LG DeJupp
     
    dejupp, 25. April 2023
    #7
  8. Doming
    Doming hat Ahnung

    For Each Next läuft nur einmal durch

    Klick im Codefenster neben die Zeile, ab der Du die Ausführung des Codes überwachen willst
    For Each Next läuft nur einmal durch upload_2023-4-25_21-56-21.png
    Dann startest Du die Codeabarbeitung und er wird an genau der Marke stoppen.
    Mit F8 geht es dann zeilenweise weiter, mit F5 läuft der Code bis zur nächsten Marke bzw. bis zum Ende durch.
     
    Doming, 25. April 2023
    #8
  9. dejupp User
    Okay, habs gefunden.
    Also erläuft die Schleifen durch, aber er ignoriert irgendwie meine Bedingung.
     
    dejupp, 25. April 2023
    #9
  10. dejupp User
    PS: Vielmehr beachtet er bei der ersten Schleife meine Bedingung, aber bei de zweiten schlefe nicht mehr. Also muss ich wahrscheinlich meine Bedingung umschreiben, aber wie?
     
  11. andyfau
    andyfau hat Ahnung
    Hallo,
    während der schrittweisen Ausführung mit F8 kannst Du dir die Variableninhalte anschauen, indem Du einfach mit den Curser drauf fährst.
    Oder du startest über Ansicht das Direktfenster. Dort kannst Du mit ?Variablenname und Enter die Inhalte Anzeigen lassen.
    Oder du machst an den interessanten Stellen im Code Debug.Print-Zeilen rein.
    Code:
    meineVar = 5
    Debug.Print meineVar
    Dann wird 5 im Direktfenster angezeigt.

    Der VBA-Editor (auch IDE genannt) bietet umfangreiche Möglichkeiten fürs Debugging. Lohnt sich, das mal näher anzuschauen.
     
    andyfau, 25. April 2023
    #11
Thema:

For Each Next läuft nur einmal durch

Die Seite wird geladen...
  1. For Each Next läuft nur einmal durch - Similar Threads - For Each Next

  2. For Each Schleifen als Struktogramm

    in Microsoft Excel Hilfe
    For Each Schleifen als Struktogramm: Hallo zusammen, folgenden Code müsste ich in einem Struktogramm unterbringen, komme aber leider mit den For Each Schleifen nicht so ganz klar. Hat jemand einen Vorschlag? Vielen Dank und schöne...
  3. For Each Schleife Anstatt ActiveSheet festen Tabellenblattnamen benutzen

    in Microsoft Excel Hilfe
    For Each Schleife Anstatt ActiveSheet festen Tabellenblattnamen benutzen: Hallo , habe folgende Schleife geschrieben : Dim rngBereich As Range Dim rngZelle As Range Sub Test() Set rngBereich = ActiveSheet.Range(ActiveSheet.Cells(1, 1), _...
  4. For Each Schleife abbrechen mit IF

    in Microsoft Excel Hilfe
    For Each Schleife abbrechen mit IF: Liebe Community, mir stellt sich gerade die Frage, wie ich eine For Each Schleife abbrechen kann. In der anhängenden Excel-Datei habe ich den Bereich A1:A25 mit dem Bereichsnamen "open"...
  5. For Each Schleife, Zellen von zwei Bereichen vergleichen

    in Microsoft Excel Hilfe
    For Each Schleife, Zellen von zwei Bereichen vergleichen: Hallo zuasmmen, ich habe folgendes Problem: Ich möchte mit einer Schleife einzelne Zellen eines definierten Bereichs durchgehen und mit den Zellen eines anderen Bereichs vergleichen....
  6. For Each Schleife mehrmals nach gleichem Wert suchen

    in Microsoft Excel Hilfe
    For Each Schleife mehrmals nach gleichem Wert suchen: Hallo Ich hänge seit einigen Tagen an einem Problem. Ich möchte Daten aus einer Tabelle über Userform D auslesen und in Userform wieder ausgeben. Das habe ich auch soweit hinbekommen. Ich suche...
  7. Recordset mit For each durchlaufen

    in Microsoft Access Hilfe
    Recordset mit For each durchlaufen: Hallo, ich habe hier einen Bericht, in dem ich Felder im Detailbereich befüllen möchte dies versuche ich mit For Each, bekomme aber nnicht raus wie, weiß jemand Rat? Code: Private Sub...
  8. VBA: For Each Schleife mit mehreren Bedingungen

    in Microsoft Excel Hilfe
    VBA: For Each Schleife mit mehreren Bedingungen: Hallo zusammen, erstmal möchte ich Euch eine schöne Osterzeit mit erholsamer Zeit wünschen.:rolleyes: Mein aktuelles Problem versuche ich schon seit geraumer Zeit zu lösen, aber da ich noch...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden