Herbers Excel-Forum - das Archiv

Lange Data Listen...

Bild

Betrifft: Lange Data Listen...
von: Norman

Geschrieben am: 15.02.2005 22:54:37
Hallo alle,
ich hatte schonmal in der Liste gefragt, ob es möglich ist, Binärdateien in Excel abzulegen (ja) und sie dann wieder auf Platte zu speichern. Letzteres ging nicht. Deshalb habe ich mich entschlossen, die Binärdatei in einem Array abzulegen, so ala
Dim varDaten As Long
varDaten1 = Array( 1, 2, 3, 5, 11, 4 _
....
)
Insgesamt will ich so ca. 20.000 Bytes (also 20.000 Zahlen) ablegen. Klar ist das viel, einen besseren Weg habe ich aber net. Leider meckert Excel immer wenn die Zeile größer 1024 Bytes ist oder ich zu viele Zeilenverbinder (also den Underscore _ ) nutze. Und ich habe irgendwie keine Lust 20 Arrays daraus zu machen. Gibt's nicht irgendeine chice Lösung für meine 20 Kb Daten? Das muss man doch schön in VBA ablegen können... Wenn mir nichts mehr einfällt, dann pack ichs einfach in ein Excel-Sheet, aber ich hätts so gerne in VBA gehabt....
Jemand ne Idee?
Beste Grüße und Danke
Norman
Bild

Betrifft: AW: Lange Data Listen...
von: bst

Geschrieben am: 16.02.2005 09:06:22
Morgen Norman,
> ich hatte schonmal in der Liste gefragt, ob es möglich ist, Binärdateien in Excel
> abzulegen (ja) und sie dann wieder auf Platte zu speichern.
> Letzteres ging nicht
Warum ?
Nimm Get und Put. Siehe VBA Hilfe (mit Beispiel) hierzu.
Oder google mal nach VBA binaer.
cu, Bernd
Bild

Betrifft: AW: Lange Data Listen...
von: Norman

Geschrieben am: 16.02.2005 14:05:15
Hi Bernd,
klar, get und put macht das was ich will. Mir geht's aber darum, wie ich eine 20Kb große Datei in einer xls-Datei ablegen kann und sie zu einem späteren Zeitpunkt (mit put) wieder auf die Platte zurüschreiben kann.
Google VBA binaer hat mir da nichts gebracht.
Gruß
Norman
Bild

Betrifft: AW: Lange Data Listen...
von: bst

Geschrieben am: 16.02.2005 15:11:16
Hmm,
dann versuch halt mal sowas. Ist sich ziemlich ungetestet.
Liest einfach die Binärdaten ein und schreibt ihren Code (0..255) in eine Zelle.
Je 256 Mal pro Zeile. Das Schreiben funktioniert analog.
Wozu auch immer dieses gut sein soll ...
HTH, Bernd
--
Option Explicit
Const fname As String = "D:\temp\test.bin"
Sub ReadIt()
Dim i As Long, j As Integer, xlen As Long
Dim arr(1 To 256) As Byte
Open fname For Binary Access Read As #1
xlen = LOF(1) Mod 256 ' der Rest am Ende
While Not EOF(1)
i = i + 1
Get #1, , arr
For j = 1 To 256
Cells(i, j).Value = arr(j)
Next
Wend
If xlen <> 0 Then Range(Cells(i, xlen + 1), Cells(i, 256)).Clear
Close #1
End Sub

Sub WriteIt()
Dim i As Long, j As Integer, maxj As Integer
Dim arr() As Byte
If Dir(fname) <> "" Then Kill fname
ReDim arr(1 To 256)
Open fname For Binary Access Write As #1
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row - 1
For j = 1 To 256
arr(j) = Cells(i, j)
Next
Put #1, , arr
Next
' Letzte Zeile speziell behandeln
maxj = IIf(Cells(i, 256) = "", Cells(i, 256).End(xlToLeft).Column, 256)
ReDim arr(1 To maxj)
For j = 1 To maxj
arr(j) = Cells(i, j)
Next
Put #1, , arr
Close #1
End Sub

Bild

Betrifft: AW: Lange Data Listen...
von: Norman

Geschrieben am: 16.02.2005 18:54:40
Hi Bernd,
ja, cool, so in etwa hatte ichs mir gedacht. Das kann ich auf alle Fälle benutzen.
"Wozu auch immer dieses gut sein soll ..." - Nuja, ich will eben keine gesonderte Datei beilegen, sondern alles in einer Datei haben. In den 20Kb steckt eine Exe, die vor dem Speichern noch verändert werden soll. Und Deine Lösung ist genau der Weg das zu machen :)
Gruß und Danke!
Norman
Bild

Betrifft: Gruß & Bitteschön OwT
von: bst
Geschrieben am: 16.02.2005 22:44:21
.
 Bild