1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

vba in excel: Dateizeiger wieder auf Anfang setzen

Discussion in 'Programmieren' started by scullhead, May 6, 2009.

Thread Status:
Not open for further replies.
  1. scullhead

    scullhead Byte

    Hallo,

    ich möchte mittels eines Makros in Excel eine Textdatei zeilenweise einlesen und an ein Array übergeben. Hierzu lese ich die Datei zunächst komplett ein um die Anzahl der Zeilen zu ermitteln. In einem 2. Durchlauf soll der Inhalt dann an ein Array übergeben werden.

    Folgendes habe ich bisher programmiert:

    Code:
      Ablagepfad = Range("B4").Value
      
      Set DateiObj = CreateObject("Scripting.FileSystemObject")
      
      DateiZeilen = 1
      If (DateiObj.fileExists(Ablagepfad) = True) Then
        Range("B8").Value = DateiObj.fileExists(Ablagepfad)
        Set Datei = DateiObj.OpenTextFile(Ablagepfad)
        
        'Anzahl der Zeilen in der Datei ermitteln, Array anpassen und Datei einlesen
        Do Until Datei.AtEndOfStream
           Puffer = Datei.ReadLine
           DateiZeilen = DateiZeilen + 1
           Puffer = ""
        Loop
        
        Range("B6").Value = "Länge " & DateiZeilen & " Zeilen"
        ReDim Inhalt(DateiZeilen)
        DateiZeilen = 1
        
        
        Do Until Datei.AtEndOfStream
           Inhalt(DateiZeilen) = Datei.ReadLine
           DateiZeilen = DateiZeilen + 1
        Loop
        
        Datei.Close
        Set Datei = Nothing
        Set DateiObj = Nothing
        
        Range("B12").Value = Inhalt(3)
    
      
      Else
        MsgBox "Datei " & Ablagepfad & " existiert nicht", vbCritical
        Set Datei = Nothing
        Set DateiObj = Nothing
      End If
    
    
    Mein Problem ist jetzt, dass beim 2. Durchlauf der Datei nichts mehr eingelesen wird, weil der Dateizeiger bereits am Ende der Datei steht.

    Meine Frage daher:

    Gibt es eine Funktion in Visual Basic die den Dateizeiger auf Anfang zurücksetzt, ohne dass ich die Datei nochmals öffnen muss?

    :comprob:

    Danke schonmal für ausführliche Antworten
     
  2. Urs2

    Urs2 Megabyte

    Mir ist kein solcher Weg bekannt (es sind ja eigentlich VBScript-Befehle, die VBA hier verwendet).

    Ich würde vor dem zweiten Do/Loop, mit Datei.Close die Textfile schliessen... und mit Set Datei = ....... nochmals öffnen.
    So schnell kann man ja gar nicht schauen, wie das dann ausgeführt wird...

    Gruss Urs
     
  3. scullhead

    scullhead Byte

    Danke für die Antwort

    Das hatte ich mir auch schon überlegt - und falls es tatsächlich nichts gibt werd ich es wohl so machen. Dachte halt es gäbe eine elegantere Lösung.

    p.S.

    nach einigem Googeln bin ich auf die seek() Funktion gestossen - damit kann man offenbar die Datei ab einer definierten Position einlesen.
     
  4. VB-Coder

    VB-Coder Megabyte

    lies dir mal folgendes durch eventuell hilft's dir ja weiter klick
     
  5. Urs2

    Urs2 Megabyte

    seek() .... das ist ein VBA-Befehl (ich denke dabei eher an Datensammlungen) ... vielleicht funktioniert es, vielleicht nicht...

    Du greifst mit CreateObject ja auf VBS (oder eine Art VB6) zu.
    Dann müssten VBA und VBS/VB6 den Befehl identisch interpretieren...

    Gruss Urs
     
  6. scullhead

    scullhead Byte

    Danke für den Tipp mit dem Buch. Ich werde es mal versuchen und falls es klappt dann hier posten

    :danke:
     
  7. scullhead

    scullhead Byte

    Problem gelöst.
    Ich habe es nun doch dabei belassen die Datei ein 2. mal zu öffnen und einzulesen - funktioniert tadellos.
     
Thread Status:
Not open for further replies.

Share This Page