Falsche Datensatzlänge...mal wieder...
12.05.2017 13:37:10
Brüggmann
ich wende mich an dieses forum, weil ich im Internet nichts passendes gefunden habe. Es geht um Excel 2016 (32-Bit) - sowie z. T. auch um Excel 2013 (64 Bit), beide unter Win10.
Ich selber nutze die 2016er-Version. Ich habe eine "Datenbank" angelegt. Hier der Type dazu:
Type MitarbeiterDaten
PersNr As String * 10
Vorname As String * 20
Nachname As String * 40
Eintritt As Date
Austritt As Date
Tätigkeiten As String * 33
Wochenstunden As Integer
MonatsStunden As Integer
TagStunden As Integer
Abteilung As String * 30
PrimEinsatz As String * 30
Bereich As String * 20
Status As String * 25
Jahresurlaub As Integer
Sonderurlaub As Integer
VorjahresUrlaub As Integer
VerplanterUrlaub As Integer
Resturlaub As Integer
Stundenkonto As Integer
VerplanteStunden As Integer
Kranktage As Integer
EinsatzTage As String * 7
GebDat As Date
Telefon1 As String * 30
Telefon2 As String * 30
Bemerkung As String * 200
Strasse As String * 50
Zusatz As String * 50
PLZ As String * 10
Ort As String * 50
BereitsHier As Boolean
Schichtmodell As Integer
WinUser As String * 20
LX1User As String * 20
TL As String * 60
End Type
Der Fehler ist folgender: Bei mir läuft diese Datei problemlos. Bei Excel 2013 gibt es beim ersten GET ein "Falsche Datensatzlänge" (der Code ist identisch zu meinem, OPTION EXPLICIT usw. ist alles dabei, alles ist mit DIM/PUBLIC angelegt). Das kuriose ist: Speichere ich die Tabelle bei mir ab, dann klappt GET unter 2013 ohne Probleme.
Es wird noch besser: Aus Excel 2013 heraus wurde eine andere Datei angelegt
Type Schulung
PersNr2 As String * 10
Vorname2 As String * 20
Nachname2 As String * 40
Datum2 As Date
AnwNr2 As Integer
AnwTitel2 As String * 100
End Type
Möchte ich auf diese mit 2016 zugreifen, kommt "Falsche Datensatzlänge" beim ersten GET. Füge ich in meinem Code eine Leerzeile ein, oder entferne irgendwo irgendeine Anweisung - auch wenn es im Code einer Userform ist, oder in einem ganz anderen SUB, dann verschwindet der Fehler 59 und GET liest die Datei.
Aber eben nur, bis man wieder was am Code ändert. Dann geht das Ausprobieren wieder los.
Ich halte fest:
- Alle Vars im kompletten Code sind mit DIM name AS typ angelegt, zur Sicherheit steht überall OPTION EXPLICIT. Der Kompiler meckert nicht.
- Die TYPEs sind wie oben aufgeführt. Es werden keine Variants verwendet.
- Beim Untersuchen der Dateien mit einem Hex-Editor stehen in den Strings keine "komischen" Zeichen, die ggf. Probleme verursachen könnten.
- Wenn der Fehler 59 auftritt, dann bleibt er - bis man den Code willkürlich ändert.
Woran liegt das und was kann ich tun?
Selbst ein einfaches
DIM dn as INTEGER
DIM Datensatz as MitarbeiterDaten
dn = FREEFILE
OPEN "Datei" FOR RANDOM AS DN LEN=LEN(datensatz)
GET DN,1,Datensatz
führt bereits zum Error 59 - aber nur, bis man z. B. DN in DN2 umbenennt (oder irgendetwas anderes macht, z. B. eine MSGBOX einbaut).