Code für das Einlesen von einer Zeile aus mehreren Dateien

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von vba-noob111.

    Code für das Einlesen von einer Zeile aus mehreren Dateien

    Hallo,

    Ich bin unwissender Anfänger was VBA angeht und habe folgendes Problem.

    Ich habe viele .dis-Dateien die ich gerne in Excel weiterverarbeiten würde.

    Ich würde gerne die vorletzte Zeile der .dis-Datei in die erste Zeile meiner Excel Tabelle übertragen.

    Die dis.-Dateien sehen immer gleich aus. Im Anhang befindet sich eine Beispieldatei.

    Ich brauche pro Spalte einen Wert aus der vorletzten Zeile (durch Leerzeichen getrennt).

    Für jede neue .dis-Datei soll eine Zeile weitergesprungen werden in Excel.

    Vielen Dank im Voraus.

    Gruß Reinhold
    Dateien
    • Beispiel.zip

      (3,72 kB, 66 mal heruntergeladen, zuletzt: )
    Willkommen im Forum.

    Ich hab mir (und ggf. der Nachwelt?) jetzt mal ne ReadAllLines-Function zusammengeschustert, mit der Du weiterarbeiten kannst. Das ist keine fertige Lösung!

    Visual Basic-Quellcode

    1. Sub Makro1()
    2. Dim Text() As String
    3. Text = ReadAllLines("C:\Users\Zed\Desktop\Beispiel.dis")
    4. End Sub
    5. Function ReadAllLines(FileName As String) As String()
    6. Dim Result() As String
    7. If Dir(FileName) = "" Then
    8. ReDim Result(0)
    9. ReadAllLines = Result
    10. Exit Function
    11. End If
    12. Set fs = CreateObject("Scripting.FileSystemObject")
    13. Set f = fs.OpenTextFile(FileName, 1, 0)
    14. Dim CompleteText As String
    15. Dim Count As Integer
    16. CompleteText = f.ReadAll
    17. Count = StringCountOccurrences(CompleteText, vbCrLf)
    18. ReDim Result(Count)
    19. f.Close
    20. Set f = fs.OpenTextFile(FileName, 1, 0)
    21. For i = 0 To Count - 1
    22. Result(i) = f.ReadLine
    23. Next
    24. ReadAllLines = Result
    25. End Function
    26. Function StringCountOccurrences(strText As String, strFind As String, Optional lngCompare As VbCompareMethod) As Long '*
    27. Dim lngPos As Long
    28. Dim lngTemp As Long
    29. Dim lngCount As Long
    30. If Len(strText) = 0 Then Exit Function
    31. If Len(strFind) = 0 Then Exit Function
    32. lngPos = 1
    33. Do
    34. lngPos = InStr(lngPos, strText, strFind, lngCompare)
    35. lngTemp = lngPos
    36. If lngPos > 0 Then
    37. lngCount = lngCount + 1
    38. lngPos = lngPos + Len(strFind)
    39. End If
    40. Loop Until lngPos = 0
    41. StringCountOccurrences = lngCount
    42. End Function

    * shamelessly stolen from codevba.com

    @petaod & @mumpel: Geht das nicht noch effizienter?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ein Testbeispiel für eine Datei.
    Ergebnisse werden in Zeile 1 eingetragen.

    Visual Basic-Quellcode

    1. Sub test()
    2. Dim t$, i&, L&, arr$()
    3. Open "D:\#0\Beispiel.dis" For Binary As #1 '<--- Pfad anpassen
    4. L = LOF(1) - 150
    5. t = Space$(150)
    6. Seek #1, L
    7. Get #1, L, t
    8. Close
    9. 'Debug.Print t
    10. t = Split(t, vbCrLf)(1)
    11. Debug.Print t
    12. While InStr(t, " ")
    13. t = Replace(t, " ", " ")
    14. Wend
    15. Debug.Print t
    16. arr = Split(t, " ")
    17. For i = 1 To UBound(arr, 1)
    18. Cells(1, i) = arr(i)
    19. Next
    20. End Sub
    Hallo,
    Danke erstmal für eure schnelle Hilfe.

    @Eierlein: Der Code funktioniert super. Allerdings brauche ich die drittletzte Zeile und nicht die vorletzte, hatte mich geirrt.

    Wie müsste ich den code verändern um an die drittletzte Zeile zu gelangen?

    LG Reinhold