Clever-Excel-Forum

Normale Version: Laufzeitfehler 62 Einlesen hinter Dateiende
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Forum,

seit Jahre nutzen wir diesen Code ohne Probleme, seit heute bekommen wir
beim einlesen diese Fehlermeldung!

Laufzeitfehler '62'
Einlesen hinter Dateiende

woran könnte das liegen?

Code:
Sub Input_Files_From_Path()
'---------------------------------------
'eingefügt von Mir
'---------------------------------------
'Daten importieren
Dim strPfad     As String
Dim strDatei    As String
Dim intFF       As Integer
Dim strText     As String
Dim wks         As Worksheet

Set wks = Tabelle1                                          'Anpassen ***********
strPfad = "C:\Users\fretga\Desktop\Datenbank\"                 'Anpassen ***********
strDatei = Dir(strPfad & "*.txt")                           'Anpassen ***********
Sheets("Tabelle1").Cells.Clear

Do While strDatei <> ""


    intFF = FreeFile()
    Open strPfad & strDatei For Input As #intFF
        strText = Input(LOF(1), #intFF)
    Close #intFF
  
    WriteToClp strText
  
    With wks
        With .Cells(Rows.Count, 1).End(xlUp).Offset(1)
            .Value = 1
            .TextToColumns .Cells(1), Space:=True
            wks.Paste .Cells(1)
        End With
    End With
  
    strDatei = Dir()
Loop
Calculate
End Sub

folgende Codepasage ist gelb markiert:

Code:
strText = Input(LOF(1), #intFF)


Besten Dank im Voraus
omron2003
Hast du die .txt Datei schon inspektiert ?
Die letzte VBCrLf fehlt wahrscheinlich.

Alternative

Code:
strtext=createobject("scripting.filesystemobject").opentextfile(strPfad & strDatei).readall
Hallo Omron,

hierzu fällt mir folgendes ein:

Du ermittelt die nächste freie Filenumber über intFF = FreeFile(), verwendest aber zum Einlesen die Länge von LOF(1). Falls die Nummer 1 bereits geöffnet ist, erhälst Du z.B. die Nummer 2. Wenn jetzt die 1. Datei länger als die 2. ist, versucht der code mehr zu lesen als vorhanden ist.

Setze also besser strText = Input(LOF(intFF), #intFF) in Deinen Code.

Und ich habe, falls obiges nicht zutreffen sollte auch eine Alternative:
'.....
intFF = FreeFile()
Open strPfad & strDatei For Binary Access Read As #intFF
strText = Space$(LOF(intFF))
Get intFF, , strText
Close #intFF
'.....

viele Grüße
Karl-Heinz

Hi snb,

wenn mich nicht alles täuscht, braucht als letztes Zeichen kein CR stehen, allerdings ein EOF (Zeichen 26). 
Ich meine mich dunkel daran erinnern zu können, aus Zeiten in denen ich experimentell binäre Textdateien einfach mal verkürzt hatte.

viele Grüße
Karl-Heinz
@Volti

Hier is das Ergebnis von

Code:
Sub M_snb()
    c00 = CreateObject("scripting.filesystemobject").opentextfile("G:\OF\beispieldatei.txt").readall
    MsgBox Asc(Left(Right(c00, 2), 1)) & vbTab & Asc(Right(c00, 1))
End Sub

13 & 10
Hallo,

da möchte ich noch etwas zur Verwirrung beitragen:

Mit Tail habe ich mir die letzten Bytes von txt-Dateien ausgeben lassen, die sich (zufällig auf meinem Desktop befinden:

Code:
1.txt

T:  72 62 65 69 74 75 6E 67 73 67 65 62 C3 BC 68 72 20 33 20 E2 82 AC
Bytes.Count 78
----------------
2.txt

T:  61 74 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A
Bytes.Count 3764
----------------
3.txt

T:  4C 3D 6C 69 76 65 2E 37 64 36 63 38 37 31 31 2E 6A 73 2E 6D 61 70
Bytes.Count 43485
----------------
4.txt

T:  64 65 2F 62 62 73 2F 75 73 65 72 2F 31 33 39 33 34 37 2E 74 78 74
Bytes.Count 76
----------------
5.txt

T:  74 72 61 67 73 65 69 6E 6E 61 68 6D 65 6E 0D 0A 0D 0A 0D 0A 0D 0A
Bytes.Count 665
----------------
6.txt

T:  64 65 78 2E 70 68 70 2F 62 6F 61 72 64 2C 37 2E 30 2E 68 74 6D 6C
Bytes.Count 59
----------------
7.txt

T:  3A 33 31 3A 30 35 3A 66 64 20 20 32 32 25 20 20 0D 0A 0D 0A 0D 0A
Bytes.Count 56446

Die Zeichen Asc 10 13 kommen vor, aber nicht immer. außerdem hatte ich "Magic-Bytes" für die Kodierung erwartet.

mfg

-----------------------

Der Powershell-Code

Code:
# PK: dezimal 80 75; Hex 50 4B
# Start: dez 80 75 03 04
# Ende:  dez 80 75 05 06

$Pfad = $env:USERPROFILE + '\desktop\'
$Files = get-childitem $Pfad -Filter *.txt
Write-Host " `n ---------------- `n"

foreach ($File in $Files) {

    write-host $File
    $Bytes = get-content ($Pfad + $File) -Encoding Byte -ReadCount 22 -TotalCount 22
        write-host ('H: ', "{0:X2}" -f $Bytes) -NoNewline
        Write-Host
        if ($Bytes[0] -ne 80 -or $Bytes[1] -ne 75) {
            write-host '>>>>>>>>> Falsches Dateiformat <<<<<<<<<<'}
    $Bytes = get-content ($Pfad + $File) -Encoding Byte -Tail 22  -ReadCount 22 #-TotalCount 16
        write-host ('T: ', "{0:X2}" -f $Bytes) -NoNewline
        Write-Host
    
    
    $Bytes = get-content ($Pfad + $File) -Encoding Byte
    [boolean]$Bo = $false

    for ($B=0; $B -le $Bytes.Count; $B = $B + 2) {
        if ($Bytes[$B] -eq 80 -and $Bytes[$B+1] -eq 75) {
            if ($Bytes[$B+2] -eq 5 -and $Bytes[$B+3] -eq 6) {
                write-host ('End at: ',$b)
                if ($B -lt $Bytes.Count - 25) {$Bo = $true}
                # NUR P (post)
            }
        }

    }
    write-host ('Bytes.Count', $bytes.Count)
    if ($Bo) {write-host ">>>>>>>>> Warnung <<<<<<<<< `n`n"}
    Write-Host " `n ---------------- `n"
}

(der Code dient zur Prüfung von Office-Dateien)
@snb:

Habe mich unsauber ausgedrückt.
Es muss kein CR stehen, kann aber. Wenn ich z.B. mit Print etwas in eine Datei geschrieben habe, ist am Schluss schon ein CR.
VG KH
Danke für die rege Teilnahme an meinem Problem.

@snd
Also in den .txt Dateien habe ich keine Auffäligkeiten gefunden,
aber mit deiner Code Alternative scheint es wieder zu funktionieren.

Nochmals Danke...

LG
omron2003