¿Cómo ver una imagen desde un listbox?
Tengo un formulario donde contiene un listbox cuya funcio de dicho objeto es mostrarme Información sacada de una base de datos, la base de datos a demás de tener información también contienen imágenes o mejor dicho la dirección de su ubicación. Lo que quiero es ya encontrada dicha información muestre la imagen al darle click a la información que requerí .
Hol.a
O sea la ruta de las imágenes queda en el "ListBox" ¿cierto? ¿En qué número de columna? Si puedes manda al menos una captura de pantalla del "ListBox" con los datos.
Abraham Valencia
Hol.a
Coloca un objeto "Image" en tu "UserForm", supongamos que se llama "Image1", entonces tomando en cuenta que las rutas de las imágenes están en la columna 6, que tu "ListBox" tiene encabezados y que la matriz de los "ListBox" comienza en (0,0) [Filas, columnas] entonces algo así lo que haría es cargar la imagen correspondiente a la ruta de la primera fila:
Image1.Picture = LoadPicture(ListBox1.List(0, 5))
Comentas
Abraham Valencia
Osea que me dice que lo que pido no es posible por que ya había pensado en poner una Image1 pero no acepte la idea por el simple hecho que el usuari al buscar la imagen no podrá darle zoom ni nada por el estilo
Se puede emular el "Zoom" pero hay que programar más y no sé como andas en VBA, pero quizá lo que quieras en abrir con otro programa las imágenes ¿o no?
Abraham Valencia
Aja, entonces prueba así:
Coloca esto en la parte superior del módulo del "UserForm" (no debe haber nada sobre eso):
#If VBA7 Then Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long #Else Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long #End If
Si tu Office es de 64 bits, quizá algunas letras de ese código las veas en rojo, no te preocupes.
Luego esto haría lo que deseas:
Dim MiImagen As String MiImagen = ListBox1.List(0, 5) ShellExecute 0, "open", MiImagen, "", "", 1
Comentas
Abraham Valencia
Ah claro, hay un "On Error Resume Next" por eso no hay ningún mensaje. Bórralo y comentas.
Abraham Valencia
PD ¿Es la sexta columna la de las rutas?
No es por "On Error Resume Next" lo quite y sigue sin funcionar y si es la sexta columna la que tiene la ruta de la imagen
Acabo de revisar que delante de la ruta tienes un "ver imagen", por eso no puede abrirlas, toma esas palabras como parte de la ruta
Abraham Valencia
Tranquila, la programación se aprende poco a poco. Asumo que quieres hacer eso para probar, entonces, si estás 100% segura que esa es la ruta correcta, solo deja como has puesto pero encierra esa ruta entre comillas:
"C:\Users\fsepulveda\Desktop\Imagen.jpg"
Abraham Valencia
Je je je, te aseguro que es la ruta. Anda a esa imagen y toma captura de pantalla de sus propiedades (Click derecho al archivo y elige "Propiedades"), algo así:
Abraham Valencia
PD: Se supone que las imágenes están en tu PC ¿cierto?
La ruta la puedes ver de todos modos en una de la primeras imágenes que te envíe que vendría siendo esta "C:\Users\fsepulveda\Desktop\hshshsh.jpg"
Prueba en un archivo nuevo, inserta un módulo "standard" y pega esto:
#If VBA7 Then Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long #Else public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long #End If Sub RRR() ShellExecute 0, "open", "C:\Users\fsepulveda\Desktop\hshshsh.jpg", "", "", 1 End Sub
Corre la macro "RRR" si no ocurre nada, lo siento pero es tu ruta la errada. Si abre el archivo, habrá que ver más de fondo aún.
Comentas
Abraham Valencia
Pues es la ruta al parecer pero igual otra pregunta, cuando a una imagen le da doble click ¿qué programa las abre?
Abraham Valencia
Aunque parezca redundante de mi parte, por lo menos desde aquí y con todo lo que hemos conversado, parece que la ruta no es correcta.
Abraham Valencia
Estimada, por eso te decía lo de la ruta, yo puse que no te olvides la extensión y coloqué de ejemplo el ".jpg" como tú lo mantuviste asumí que casualmente era también la tuya, ya con lo que mencionas, es otra. Verifica por favor, si no sabes como ver la extensión, envía la captura de pantalla de las propiedades que te mencioné ayer y que no enviaste (por algo te lo pedí ;) )
Abraham Valencia
La extensión es "JPEG" y la ruta completa para esa imagen que muestras es:
"C:\Users\fsepulveda\Desktop\hshshsh\1234.JPEG"
Ese era el problema
Abraham Valencia
Por que con una sola dirección de la imagen me la abre pero quiero que me abra la imagen que yo seleccione
Intente poner la ruta de esta forma y tampoco me funciona "C:\Users\fsepulveda\Desktop\hshshsh.JPEG"
No olvides que llegamos a este punto porque teóricamente no funcionaba y aunque yo te decía lo de la ruta, tú insistías que ese no era el error.
Segundo, volviendo al problema inicial, en realidad antes que nada debes tener en el "ListBox" (o en las celdas) las rutas correctas, si no las corriges, cualquier cosa que intentemos hacer seguirá sin funcionar.
Abraham Valencia
Y en esas celdas no tienes rutas sino hipervínculos con texto que hace que el VBA no los reconozca como rutas. Tienes dos alternativas si quieres que tu idea funcione: O cambias todo esos hipervínculos por las rutas correctas o a través de programación extraes la ruta del hipervínculo pero eso te obligaría a no usar "RowSource" para llenar el "ListBox" sino a programar con "List" o "AddItem" y además tampoco podrías usar los encabezados del "Listbox" .
Abraham Valencia
- Compartir respuesta