Name der aktuell ausgelesenen txt Datei

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Magnus.

    Name der aktuell ausgelesenen txt Datei

    Hallo Gemeinde,
    ich komme nicht klar. Entweder ich stelle die falsche Suchanfrage, oder es konnte noch nichts helfen.

    Ich lese eine txt Datei ein in Excel. Das klappt. jetzt muss ich nur eine Schleife bauen, um x viele Dateien einzulesen und unten dran zu fügen. Dabei hapert es schon am Namen der jeweiligen Datei, die ich auslese. Da steht das Datum drin, welches noch auf die KW genormt werden muss :)wie kriege ich den Namen der aktuell geöffneten Datei raus?

    In meinem Code ist die Datei noch fest verdrahtet. Das Datum wechselt und das brauche ich :)

    Kann da einer helfen?

    Visual Basic-Quellcode

    1. Sub ImportDaten()
    2. Dim quelldatei As String
    3. Dim zeile As Integer
    4. Dim inhalt As String
    5. Dim informationen() As String
    6. Dim i, s As Integer
    7. ThisWorkbook.Worksheets("Inputdaten").Activate
    8. zeile = 2
    9. quelldatei = "Pfad\Output_Gesamt_A_20220223.txt"
    10. 'Hier der Schleifenbeginn zum nacheinander Öffnen
    11. Open quelldatei For Input As #1
    12. Do While Not EOF(1)
    13. Line Input #1, inhalt
    14. informationen = Split(inhalt, ";")
    15. For i = 0 To UBound(informationen)
    16. s = i + 1
    17. ActiveSheet.Cells(zeile, s) = informationen(i)
    18. Next
    19. zeile = zeile + 1
    20. Loop
    21. Close #1
    22. ' Hier Schleifenende
    23. End Sub

    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    stimmt.

    Ich habe gerade den Workaround, dass ich um die Dateiöffnung herum eine Schleife habe, mit der ich im Verzeichnis alles Dateien öffne und nach dem Namensmuster die Dateibezeichnung in ein Array schreibe.
    Das dauert aber ganz schön lang.
    Mir geht es ja um die 200 Dateien, die da liegen und jeden Tag eine neue kommt.
    Die muss wieder eingelesen werden am Freitag, mit allen neuen. Da brauche ich eine "Anfügeoption".

    Visual Basic-Quellcode

    1. Sub ImportDaten()
    2. Dim quelldatei As String
    3. Dim zeile As Integer
    4. Dim inhalt As String
    5. Dim informationen() As String
    6. Dim i, s As Integer
    7. Dim myAr(), strPfad As String
    8. Dim AA As Long
    9. Dim sFiles As String
    10. ThisWorkbook.Worksheets("Inputdaten").Activate
    11. zeile = 2
    12. strPfad = Pfad ' ist bekannt und fest verdrahtet
    13. 'Alle Dateinamen in ein Array und Abfrage Excel
    14. ReDim Preserve myAr(100000)
    15. sFiles = Dir$(strPfad & "Output_Gesamt_*.txt")
    16. Do While sFiles <> ""
    17. myAr(AA) = sFiles
    18. 'öffne Datei
    19. Open strPfad + myAr(AA) For Input As #1
    20. Do While Not EOF(1)
    21. Line Input #1, inhalt
    22. informationen = Split(inhalt, ";")
    23. For i = 0 To UBound(informationen)
    24. s = i + 1
    25. ActiveSheet.Cells(zeile, s) = informationen(i)
    26. ActiveSheet.Cells(zeile, s + 1) = myAr(AA)
    27. Next
    28. zeile = zeile + 1
    29. Loop
    30. Close #1
    31. AA = AA + 1
    32. sFiles = Dir$()
    33. Loop
    34. If AA > 0 Then
    35. ReDim Preserve myAr(AA - 1)
    36. End If
    37. End Sub


    *Erneut Code-Tags gesetzt, bitte beim nächsten Mal selbst machen*!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Mal kurz eine Nebeninfo: Du deklarierst zwar schön alle Variablen, aber ich glaube, dass dir nicht bewusst ist, dass du i und myAr als Variant deklarierst (Integer und String sind vermutlich gewünscht).

    In VB.NET geht (soweit ich weiß) das hier: Dim x, y As Integer => Beides Integer
    In VB 6 und VBA aber nicht! Dim x, y As Integer => x = Variant (da steht nämlich quasi nur Dim x), y = Integer

    Du möchtest sicher: Dim x As Integer, y As Integer
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Visual Basic-Quellcode

    1. Dim FS As Object, Folder As Object, File As Object, Age As Long
    2. Set FS = CreateObject("Scripting.FileSystemObject")
    3. Set Folder = FS.GetFolder(Pfad)
    4. For Each File In Folder.Files
    5. If File.Name Like "Output_Gesamt_*.txt" Then
    6. Age = DateDiff("d",File.DateLastModified,Now)
    7. If Age < 7 Then 'noch keine 7 Tage alt
    8. 'hier einlesen und bearbeiten
    9. End If
    10. End If
    11. Next
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --