Der Fehler ist einigermaßen selbsterklärend:Ein Bildsteuerelement in Microsoft Access kann entweder an einen Dateispeicherort gebunden oder auf eine .dib
gesetzt werden Bild (geräteunabhängige Bitmap formatieren
, eines der obskureren Bildformate).
Das zu umgehen ist jedoch nicht so einfach.
Sie können diese Einschränkung auf verschiedene Weise umgehen:
- Verwenden Sie ein ActiveX-Steuerelement, das mehrere Bildformate unterstützt (es gibt mehrere zu finden)
- Speichern Sie das Bild in einem temporären Ordner auf der Festplatte und legen Sie die Steuerquelle für Bilder auf seinen Speicherort fest
- Verwenden Sie ein Webbrowser-Steuerelement und verwenden Sie den HTML-
<img />
-Tag, um Ihr Bild anzuzeigen, indem Sie ein eingebettetes BASE64-Bild verwenden
Hier ist der Beispielcode für Ansatz 3:
Zunächst müssen wir in der Lage sein, den im OLE-Objekt enthaltenen Binärcode in BASE64:
umzuwandelnPublic Function ToBase64(Bytes As Variant) As String
Dim XMLElement As Object
Set XMLElement = CreateObject("Msxml2.DOMDocument.6.0").createElement("tmp")
XMLElement.DataType = "bin.base64"
XMLElement.nodeTypedValue = Bytes
ToBase64 = Replace(XMLElement.Text, vbLf, "")
End Function
Dann können wir ein Webbrowser-Steuerelement verwenden und eine Webseite mit dem BASE64-codierten Bild darin einfügen:
Public Sub InsertImageInControl()
Dim wb As Object
Set wb = MyWebbrowserControl.Object
With wb
.Navigate2 "about:blank"
Do Until .ReadyState = 4 '=READYSTATE_COMPLETE
'This is a somewhat inefficient way to wait, but loading a blank page should only take a couple of milliseconds
DoEvents
Loop
.Document.Open
.Document.Write "<!DOCTYPE html><HTML><HEAD><TITLE>A</TITLE></HEAD><BODY scroll=""no"" style=""margin: 0px; padding: 0px;"">"
.Document.Write "<img alt="""" style=""width:100%; margin: 0px; padding: 0px;"" src=""data:image/jpg;base64,"
.Document.Write ToBase64(MyOLEObject.Value)
.Document.Write """ />"
.Document.Write "</BODY></HTML>"
.Document.Close
End With
End Sub
Wobei MyWebbrowserControl
ist der Name Ihres Webbrowser-Steuerelements, image/jpg
ist Ihr Bildtyp und MyOLEObject
ist Ihr OLE-Objekt.
Tipps:
- Verwenden Sie nicht das WebBrowser-ActiveX-Steuerelement, sondern das mit Access gelieferte. Andernfalls erhalten Sie eine veraltete Version von Internet Explorer mit einem 3D-Rahmen, der nicht entfernt werden kann.
- Setzen Sie die Kontrollquelle für die Webbrowser-Kontrolle auf
="about:blank"
um es als leere Seite zu initialisieren