ich versuche ein zweidimensionales Array (testweise 100 X 2) im Binärmodus zu speichern und wieder aufzurufen. Das Speichern klappt ohne Fehlermeldung, per debug.print habe ich auch getestet, ob die Dimensionen 100 und 2 richtig gespeichert sind (klappt auch).
Beim Aufrufen dagegen wird scheint es auf einmal ein 100 X 537133058 Array zu sein. Wie kann das sein? Weiß jemand, was da passiert ist bzw. wie ich das Programm generell dazu bringen kann, meine Matrix richtig abzuspeichern und wieder abzurufen?
Ich bin für jeden Hinweis sehr dankbar!
Viele Grüße
Nobi
Sub aufruf_SaveArray()
'Programmaufruf: ruft Sub SaveArray auf und übergibt Dateipfad und zu speicherndes Array
createMatrix
SaveArray "c:\saved arrays\Matrix.dat", Matrix
End Sub
Public Sub SaveArray(ByVal sFile As String, vArray As Variant)
' Array in Datei speichern
Dim F As Integer
Dim rowCount As Long
Dim columnCount As Integer
' Falls Datei vorhanden, Abfrage ob sie überschrieben werden soll
' ja: überschreiben, nein oder abbrechen: Programm wird abgebrochen und Array wird nicht _
gespeichert.
If Dir$(sFile) "" Then
Dim ja_nein
ja_nein = MsgBox("Eine Datei mit diesem Namen existiert bereits." & _
Chr(13) & Chr(13) & "Überschreiben?", 35)
Select Case ja_nein
Case vbYes
MsgBox "Datei wird überschrieben"
Case vbNo
Exit Sub
Case Else
Exit Sub
End Select
End If
' Datei im Binary-Mode öffnen
F = FreeFile
Open sFile For Binary As #F
' Anzahl Zeilen speichern
rowCount = UBound(vArray, 1)
Put #F, , rowCount
' Anzahl Teilunternehmen speichern
columnCount = UBound(vArray, 2)
Put #F, , columnCount
' Array-Elemente speichern
Put #F, , vArray
Close #F
MsgBox "Datei wurde gespeichert unter " & Chr(13) & sFile
End Sub
Sub aufruf_ReadArray()
'Programmaufruf: ruft Sub ReadArray auf und übergibt Pfad der auszulesenden Datei
Dim MyArray() As Variant
MyArray = ReadArray("c:\saved arrays\Matrix.dat")
End Sub
Public Function ReadArray(ByVal sFile As String) As Variant
' Array aus Datei einlesen
Dim F As Integer
Dim rowCount As Long
Dim columnCount As Long
Dim vArray As Variant
' Datei im BinaryMode öffnen
If Len(Dir$(sFile)) > 0 Then
F = FreeFile
Open sFile For Binary As #F
' Anzahl Zeilen lesen
Get #F, , rowCount
' Anzahl Spalten lesen
Get #F, , columnCount
' Array dimensionieren und einlesen
ReDim vArray(1 To rowCount, 1 To columnCount)
'!!! FEHLER: an dieser Stelle stoppt das Programm mit der Fehlermeldung, dass nicht genug
'Speicher vorhanden ist. Ich habe rowCount und columnCount mit debug.print getestet - rowCount
' ist 100, columnCount wird jedoch als 537133058 ausgelesen, obwohl als 2 gespeichert...
'(in Sub savearray hatte ich es genauso mit debug.print getestet, da war es korrekt 2)
Get #F, , vArray
Close #F
End If
ReadArray = vArray
MsgBox "function readarray ist durchgelaufen"
End Function