El error se explica por sí mismo:un control de imagen en Microsoft Access puede vincularse a una ubicación de archivo o puede establecerse en un .dib
imagen (mapa de bits independiente del dispositivo formato
, uno de los formatos de imagen más oscuros).
Sin embargo, solucionarlo no es tan fácil.
Puede evitar esa limitación de varias maneras:
- Utilice un control ActiveX que admita múltiples formatos de imagen (se pueden encontrar varios)
- Guarde la imagen en el disco en una carpeta temporal y establezca la fuente de control de imágenes en su ubicación
- Use un control de navegador web y use el HTML
<img />
etiqueta para mostrar su imagen, usando una imagen BASE64 incrustada
Aquí está el código de ejemplo para el enfoque 3:
Primero, necesitamos poder convertir el código binario contenido en el objeto OLE a BASE64:
Public 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
Luego, podemos usar un control de navegador web e insertar una página web con la imagen codificada en BASE64:
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
Donde MyWebbrowserControl
es el nombre de su control de navegador web, image/jpg
es su tipo de imagen y MyOLEObject
es su objeto OLE.
Consejos:
- No use el control ActiveX WebBrowser, use el que viene con Access. De lo contrario, obtendrá una versión obsoleta de Internet Explorer con un borde 3D que no se puede eliminar.
- Establezca la fuente de control para el control del navegador web en
="about:blank"
para inicializarlo como una página en blanco