Hallo,
schön, dass es soweit geklappt hat.
Auf dieser Webseite ist der Source-Coder der Funktion RestoreBinFile enthalten.
Hier wird der Inhalt des Bildes in einer Array-Variable vom Typ Byte gespeichert.
Daraufhin habe ich eine Test-Befehl erstellt, der ein vorhandenes Bild einliest und anschließend wieder mit put in eine neue Datei zurück schreibt:
Sub ReadAndWritePicture()
Dim strPicture As Variant, strChar As String
Dim F As Integer
Dim arrBin() As Byte
F = FreeFile
Open "L:\temp\excel\PictureA.png" For Binary As F
ReDim arrBin(LOF(F))
Get #F, , arrBin()
Close #F
' Write
F = FreeFile
Open "L:\temp\excel\PictureA-Kopie.png" For Binary As #F
Put #F, , arrBin
Close #F
End Sub
In einer Access-DB habe ich das Auslesen eines Bildesaus einem Tabellen-Feld vom Typ OLE-Objekt nochmals vorgenommen:
Sub restorePicture()
Dim F As Integer
Dim lSize As Long
Dim arrBin() As Byte
Dim rs As DAO.Recordset
Dim sFilename As String
Dim sPath As String
sPath = "L:\temp\excel\"
sFilename = "PictureB.png"
Set rs = DBEngine(0)(0).OpenRecordset("tabPicture", dbOpenDynaset)
rs.FindFirst "[FileName]='" & sFilename & "'"
If rs.NoMatch Then
Err.Raise vbObjectError + 5, "mdlBinary", _
"Das Binär-File " & sFilename & " existiert nicht in der Tabelle 'tabPicture!'"
Else
lSize = rs.Fields("Picture").FieldSize
ReDim arrBin(lSize)
arrBin = rs.Fields("Picture").GetChunk(0, lSize)
F = FreeFile
' Schreiben der Daten
Open sPath & sFilename For Binary As #F
Put #F, , arrBin
Close #F
End If
End Sub
Bei diesen Tests ging es mir darum, festzustellen, auf welche Art und Weise ein Bild am Besten eingelesen und weggeschrieben werden kann.
Fazit:
Beide Varianten funktionieren fehlerfrei.
Bei Deinem Code wird der Inhalt fälschlicherweise in einer Variable vom Typ String gespeichert. Das ist falsch. Der Inhalt muss in einem Array vom Typ Byte gespeichert werden.
Poste am Besten den derzeiten VBA-Code nochmal. Ich versuche diesen so anzupassen, dass der Inhalt in einer Array-Variable vom Typ Byte eingelesen wird.
LG, BigBen
|