ich bin auf ein Problem gestoßen und habe es zu folgendem vereinfacht:
(Inhalt der Datei "C:\Textdatei.txt" ist "AZxxx")
Private Sub CommandButton1_Click()
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("C:\Textdatei.txt", 1, False, TristateFalse)
Cells(1, 1) = Asc(f.read(1))
Cells(1, 2) = Asc(f.read(1))
f.Close
Set f = Nothing
Set f = fs.OpenTextFile("C:\Textdatei.txt", 1, False, TristateFalse)
Cells(1, 3) = (Asc(f.read(1)) * 2) + (Asc(f.read(1)) * 3)
f.Close
Set f = Nothing
Set f = fs.OpenTextFile("C:\Textdatei.txt", 1, False, TristateFalse)
Cells(1, 4) = (Asc(f.read(1)) * 2 ^ 1) + (Asc(f.read(1)) * 3 ^ 1)
f.Close
Set f = Nothing
Set fs = Nothing
End Sub
Ausgegeben werden 65, 90, 400 und 375.
65 = Asc("A") => richtig
90 = Asc("Z") => richtig
400 = 65 * 2 + 90 * 3 => richtig
375 = 65 * 2 ^ 1 + 90 * 3 ^ 1 => falsch (400 wäre richtig, weil 2 ^ 1 = 2 und 3 ^ 1 = 1)
Auf 375 kommt man wenn man 65 und 90 vertauscht. Das hieße aber es würde falsch herum aus der Datei gelesen werden. Das ist aber nicht generell so, da ja zumindest die Zellen A1, B1 und auch C1 die richtigen Werte enthalten. Auch "(Asc(f.read(1)) & (Asc(f.read(1))" würde richtigerweise "6590" liefern.
Wenn ich bei der zweiten Berechnung eines der beiden "Asc(f.read(1))" durch die entsprechende Konstante (65 bzw. 90) ersetze dann kommt das richtige Ergebnis 400.
Wenn ich alle "Asc(f.read(1))" durch "Asc("A")" bzw. "Asc("Z")" ersetze dann kommt ebenfalls das richtige Ergebnis 400.
Wenn ich VBS und MsgBox anstatt VBA und Zellen benutze, dann funktioniert das Script so wie es ist.
Handelt es sich hier nun um eine Bug von Excel oder um einen Denkfehler meinerseits?
Gruß und Danke
Ina