Mostrar nombres de fotos en un listbox que respondan a otro listbox

Estoy frente un nuevo desafío en programación de VBA de Excel.

Tengo un listbox que va cargando registros a medida que voy escribiendo en un combobox. Hasta aquí todo me funciona bien.

Ahora bien, deseo saber cómo hacer para que al clickear en dicho listbox y seleccionar un registro, me tome los valores de los cuatro primeros campos o columnas de dicho registro y busque nombre de fotos que coincidan con uno o varios de esos valores y los archivos (que pueden ser jpg o bmp) que cumplan esa condición, me los muestre en un segundo listbox.

Acto seguido, al hacer click en alguno de esos elementos del segundo listbox, me muestre la foto. Aunque a este último paso, también creo poder hacerlo.

Desde ya, muchas gracias porque como siempre, sé de la buena voluntad de este grupo para prestar ayuda.-

1 Respuesta

Respuesta
1

Te anexo el código

Private Sub ListBox1_Click()
'Por. Dante Amor
    ListBox2.Clear
    ruta = "C:\trabajo\imagen\"
    imgs = Dir(ruta & "*.*")
    Do While imgs <> ""
        p = InStrRev(imgs, ".")
        arch = LCase(Left(imgs, p - 1))
        For k = 0 To 3
            If InStr(1, arch, ListBox1.List(ListBox1.ListIndex, k)) > 0 Then
                ListBox2.AddItem imgs
            End If
        Next
        imgs = Dir()
    Loop
End Sub

Cambia "C:\trabajo\imagen\" por el nombre de tu carpeta donde tienes los archivos con las imágenes.


.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Feliz Año 2018

.

Hola Dante...!!!

Muchas gracias por tu rápido y gentil aporte como así también tus augurios para este 2018.

Estuve probando tu código tal y como me lo enviaste, pero hasta el momento, no me muestra nada en el Listbox2. Tampoco me devuelve mensaje de ningún error.

¿Qué puede estar pasando?

He revisado línea por línea el código, pero hasta el momento, no logro ver dónde puede estar la falla. Seguiré analizándolo mientras aguardo tu respuesta.

Tienes que tener dos listbox.

En el listbox1 debes cargar nombres de archivos, cuando seleccionas un registro del listbox1 en automático la macro busca esos nombres de archivos en la carpeta, todo lo que encuentre te lo pone en el listbox2.

Dime qué datos estás poniendo en el listbox1. Pon una imagen de tu carpeta donde pueda ver los archivos de las imágenes.

El problema, entonces, se debe a que en el listbox1 no estoy cargando los archivos de imágenes; sino registros que tengo en una hoja del archivo Excel.

Paso a contarte cómo funciona:

1.- tipeo algo en un combobox y, a medida que escribo, busca esa expresión entre las cuatro primeras columnas de una hoja de mi Excel. El resultado, lo carga en el listbox1.

2.- al clickear en ese listbox1, deseo que me busque las imágenes que hay en esa misma carpeta y que contengan en su nombre cualquiera de los valores que hay en las primeras 4 columnas del listbox1. El resultado, espero que me lo muestre en el listbox2.

3.- al clickear en el listbox2, me muestre la imagen correspondiente.

Te copio el contenido de mi carpeta donde están las imágenes (no son reales aún las fotos, pues estoy en proceso de prueba hasta asegurarme de tener el código correcto).

Pero no me pusiste un ejemplo de los datos que están en tu listbox1

Perdón, entendí otra cosa.

Aquí va....

En tu imagen de userform1, no veo el Listbox2

Lo que hace la macro es lo siguiente, si seleccionas el primer registro del Listbox1, donde tienes los datos en las primeras 4 columnas:

Mandarino
Mosca Blanca
Sacatorum
Pelusa blanca

En el listbox2 te va poner la siguiente lista de archivos:

Mandarino
Mandarino1
Mandarino2
Mosca blanca
Mosca blanca-manzano

Entonces la macro está bien. Solamente tienes que poner tu listbox2 y también tienes que cambiar esta línea:

Cambia "C:\trabajo\imagen\" por el nombre de tu carpeta donde tienes los archivos con las imágenes.

En la teoría, puede que el código esté bien, amigo Dante, pero no muestra nada en el listbox2.

A propósito, el listbox2, se hace visible desde el momento en que clickeo algo del listbox1.

Aquí te pego una imagen con eso hecho y verás que no me muestra nada ni en el listbox2 ni en el cuadro de la imagen correspondiente.....

También cambié la línea que me indicás por la ruta para acceder a la carpeta que contiene las imágenes

Insisto, tienes que cambiar la carpeta en la macro.

Si no cambias la carpeta no va a encontrar ningún archivo.

O realiza lo siguiente. Pon el archivo con la macro en la misma carpeta donde tienes tus imágenes. Entonces cambia en la macro esta línea:

ruta = "C:\trabajo\imagen\"

Por esta línea:

ruta = thisworkbook.path & "\"

Prueba nuevamente


Sabes cómo hacer debug mientras se ejecuta la macro. Entra a VBA selecciona el código del userform, presiona la tecla F8 para iniciar la "depuración" paso a paso por la macro, cuando te aparezca el userform, presiona click en un registro de listbox1, presiona F8 hasta llegar a la línea

For k = 0 To 3

Acerca el mouse a la variable arch y dime qué valor te muestra

También revisa que los datos en las celdas no tengan espacios en blanco del lado derecho

Si no te funciona, envíame tu archivo para revisar el código.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Mauricio Godoy

Tienes que enviarme el archivo con todo y el formulario

Perdón, Dante.

Creí que te había enviado todo porque yo mismo lo probé y abría tanto el archivo como el código de su formulario.

Fíjate por favor ahora, que envié el archivo xlsm, el formulario y su módulo.

Abrazo.-

Pero no los envíes separados, simplemente envíame el archivo xlsm

Te anexo el código, de una vez actualicé el evento click del listbox2

Private Sub ListBox1_Click()
    Me.ListBox2.Visible = True
    Me.Foto.Visible = True
    Me.Contado1.Visible = True
    Me.Contador1.Visible = True
    ListBox2.Clear
    ruta = ThisWorkbook.Path & "\" '"C:\Users\godoy.claudio.INTA\Descargas\Plagas\"
    imgs = Dir(ruta & "*.*")
    Do While imgs <> ""
        p = InStrRev(imgs, ".")
        arch = LCase(Left(imgs, p - 1))
        For k = 0 To 3
            If InStr(1, arch, ListBox1.List(ListBox1.ListIndex, k)) > 0 Then
                ListBox2.AddItem imgs
            End If
        Next
        imgs = Dir()
    Loop
End Sub
'
Private Sub ListBox2_Click()
    Dim ruta, Foto, formato As String
    formato = ".jpg"
    Foto = ListBox2.List(ListBox2.ListIndex, 0)
    'ruta = "C:\Users\godoy.claudio.INTA\Descargas\Plagas\"
    ruta = ThisWorkbook.Path & "\"
    Me.Image.Visible = True
    Image.Picture = LoadPicture(ruta + Foto)
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Hola Dante.....!!!!

Como de costumbre, magnífico tu trabajo.

Muchas gracias por tu valioso aporte. Era exactamente lo que estaba buscando.

El que sabe..... SABE.....!!!!!!!.-

Mil ¡Gracias! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas