Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
Catálogo de Imagenes en Excel

Catálogos de imágenes con Macros

| 34 comentarios

Las empresas suelen poner ciertos códigos de identificación a cada producto, con los cuales los productos son identificados. La creación de un catálogo con imágenes de cada uno de ellos, ayudaría a reconocer con qué se está tratando y no dejar todo en el lenguaje de códigos; es por ello que ahora se mostrará cómo generarlo con las características, para mejorar el entendimiento del proceso se tendrá como ejemplo el caso de una casa deportiva dedicada a la venta de zapatillas.

Primer paso: Formato de la hoja de cálculo

Para un mejor resultado es necesario tener un formato de los datos con el cual se identifiquen las imágenes y nos permita desarrollar las macros de una forma más sencilla. En otras palabras, la recomendación es que se tenga un formato en el cual se distinga el código del producto u objeto del cual se desee presentar la imagen; además, que se ordene de manera que mientras se avance en la selección de cada celda, la carpeta con imágenes asociadas a estas seleccione la  adecuada. Para mayor facilidad se recomienda que estas tengan como nombre el código del respectivo producto al que es asociado.

En el siguiente ejemplo los productos tienen los códigos que aparecen desde la celda B4 a la celda B10.

Lista de Imagenes

Estos mismos códigos son empleados para las imágenes de los productos, es decir al producto MJ5000 le corresponderá la imagen  MJ5000.jpg, para efectos del ejemplo  estas imágenes se encuentran dentro de la carpeta "carpetadeimagenes"

Catálogo de Imagenes con Macros

Segundo paso: Insertar control Activex

Para ello vamos al menú programador (o ficha Desarrollador), después haz click en "Insertar", nos abre una ventana con muchas opciones, seleccionamos "Imagen" que se encuentra en las opciones de "controles Activex". Luego de ello, acomodamos el tamaño en el que se desee observar.

Insertar imagen activex en excel

Tercer paso: Creación de catálogo con Macros

Para crear la macros, ingresamos al Visual Basic, se selecciona el worksheet de la hoja activa  y se coloca el siguiente código en VBA (haga click sobre la imagen para ampliar)

Catálogo de Imagenes con VBA

Sobre lo propuesto es importante mencionar resaltar algunas cosas, "selection_change" se ejecuta cada vez que se seleccione una celda en el rango indicado, al hacer ello el contenido de Imagen1 cambiará; por otro lado, "Byval Target as Range" hace que el argumento no afecte el valor de la variable que sigue. "LoadPicture" se encarga de subir el archivo jpg  (para este caso) y reflejarlo en el  Activex ya hecho.

Catálogo de Imagenes en Excel

Catálogo de Imagenes en Excel

Una de las últimas recomendaciones, tenga en cuenta que es importante definir de forma correcta la dirección en la que se encuentra la carpeta de archivos. En el caso que el archivo excel tenga la misma dirección que la carpeta con imágenes se puede usar el siguiente comando:

Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\carpetadeimagenes\" & Target & ".jpg")

Donde "ActiveWorbook.Path" indica la ubicación en la que se está trabajando.

Ejemplo de Catálogo de Imágenes en Excel

Descargue el ejemplo completo (archivo zipeado) : Catálogo de imágenes en excel

 

34 comentarios

  1. desafortunadamente no m salio el ejemplo ojala m pudieras enviar un archivo de ejemplo m pide q cree una macros???

  2. hola , necesito lograr que la imagen cambie en relacion a la informacion de 1 celda, sin necesidad de hacer click en la celda. saludos

    • roberto si lograste hacer esto, acesorame porfavaor..! 😉

    • pega el siguiente codigo:

      Private Sub Worksheet_Change(ByVal Target As Range)
      'D3 es la celda con el nombre de la imagen
      foto = Range("D3").Value
      ActiveSheet.Image1.Picture = LoadPicture("direccion de la carpeta de imagenes" & "\" & foto & ".jpg")

      End Sub

    • Usa de la siguiente manera:

      ruta = ActiveWorkbook.Path & "\fotos\" & Cells(Target.Row, 2) & ".jpg"

      con Cells(Target.Row, 2), estás indicando que concatene la celda de la fila a la que haces clic (Target.row) y con el 2, le dices que de la columna en donde tienes las claves con las que buscas las fotos. En mi caso en la columna 2.

      • me podrias ayudar, no logro hacerlo

    • Y en esta línea
      If Not Intersect(Target, Range("b14:FH53")) Is Nothing Then
      debes aumentar el rango hasta en donde deseas que funcione
      ahi por ejemplo funcionará mientras hagas clic entre el rango B14 hasta FH53

    • En lo personal, la macro que utilizo es de esta manera:

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      'con el siguiente IF pregunta si está dentro del rango de la fila 12 columna 134, fuera de ese rango no funciona.
      If Target.Row > 12 And Target.Column < 134 Then
      On Error GoTo FALTA:
      IMGFOTO.Visible = True
      IMGFOTO.Picture = LoadPicture(ThisWorkbook.Path & "\fotos\" & Cells(Target.Row, 2) & ".jpg")
      [F5].Value = Cells(Target.Row, 6)
      Else
      FALTA: IMGFOTO.Visible = False
      End If
      End Sub

  3. Como puedo hacer que la imagen siga a la celda seleccionada??

    • Como puedo hacer que la imagen siga a la celda seleccionada??

  4. Berto tendrias que usar el siguiente codigo:

    Private Sub Worksheet_Change(ByVal Target As Range)

    On Error Resume Next
    If Not Intersect(Target, Range("B23")) Is Nothing Then
    Image1.Picture = _
    LoadPicture("Aqui va la direccion dela carpeta de imagenes" & Target & ".jpg")
    End If

    End Sub

    Solo cambia el valor del rango a la celda que tu requieres.
    Espero te sirva.

    • NO ME FUNCIONO TU CODIGO, ME MARCO ERROR, PERO SE ATORA EN LA SIGUIENTE:
      LoadPicture(“C:\FOTOS” & Target & “.jpg”)

      PODRAS AYUDARME..? 😉

  5. HOLA QUE TAL... RESULTA QUE ALGO ASI QUIERO HACER.. PERO ME REULTA UN POCO COMPLICADO..
    EN LA HOJA1 TENGO UN FORMATO DONDE APARTE DE LA FOTOGRAFIA QUE QUIERO QUE APARESCA TENGO DATOS RELEVANTES A ESTA, EL DETALLE NO SON LOS DATOS, PUES LOS TENGO RESUELTOS CON LA FUNCION DE BUSCRAV
    EN LA HOJA 2 TENGO "MI BASE DE DATOS", INCLUYENDO LA DIRECCION DE DONDE TENGO LA FOTO ALMACENADA EN MI DISCO DURO, Y LOS DATOS QUE LE PARTENECEN A CADA REGISTRO
    EL DETALLE ES QUE EN LA HOJA 1, COMO PUEDO HACER PARA CUANDO BUSCO UN REGISTRO, TAMBIEN ME MUESTRA LA FOTO LA CUAL LE PERTENECE...!

  6. Hola como tendria que hacer si por ejemplo quisiera que cargue todas las imagenes que empizan con MJ*.jpg

  7. Hola, espero me puedan ayudar, tengo una macro similar a ésta, lo que hace es mandar imprimir una lista de tarjetas de produccion y en cada una de ellas se debe de imprimir la foto asociada al estilo (del calzado). Si lo ejecuto con f8 puedo ver como se van cambiando las imagenes sin problema pero al mandar imprimir me deja solo la primera imagen y todas las demas tarjetas salen con la misma foto. Tendran alguna solucion.
    Este es el codigo que estoy usando (disculpen la simpleza pero soy nuevo en programacion en Excel).

    Sub ImpTarjeta()

    Range("aa2").Select
    Dim cont As Integer
    cont = 1

    Do While ActiveCell.Value ""

    'Aqui creo la cadena para el nombre del archivo

    Range("q2").Value = ActiveCell.Value
    Set fso = CreateObject("Scripting.FileSystemObject")
    nombre = Range("aa21").Value

    ' Aqui valido si el archivo existe para que lo ponga en el control de imagen

    If (fso.FileExists("D:\Documentos\Google Drive\OneDrive\Taller Produccion\Estilos\Imagenes Tarjetas\" & nombre & ".jpg")) Then

    ActiveSheet.FotoTarjeta.Picture = LoadPicture("D:\Documentos\Google Drive\OneDrive\Taller Produccion\Estilos\Imagenes Tarjetas\" & nombre & ".jpg")

    End If

    'Selecciono el rango que quiero imprimir y mando la impresion

    Range("A1:T29").Select
    Selection.PrintOut Copies:=1, Collate:=True
    cont = cont + 1

    ActiveCell.Offset(0, 9).Select
    ActiveCell.Offset(cont, 0).Select

    Loop

    End Sub

  8. Saludos, como debe ser el codigo para cambiar la opcion de Rango por lista desplegable (boxlist).

    me gustaria que la imagen cambien de acuerdoa la opcion en la lista desplegable..

    • En vez de 'Worksheet_SelectionChange' usa 'Worksheet_Change' y lo demás igual.

  9. como harías si, la celda fuera dinámica?
    me salió con lista o combobox, pero, qué pasa si la celda cambia de valor, ingresando datos manualmente.

  10. ¿cómo sería si quisieras extraerlos de algun directorio web?
    el codigo de laimagen coincide con el codigo en excel.
    Saludos.

  11. hola me marca error y se atora aqui:

    Image1.Picture = _
    LoadPicture("C:\Users\Liu-Gong\Desktop\CATALOGO\" & Target & ".jpg")

  12. Hola buen días a todos, yo tengo una duda y quiero que me hagan el favor de disiparla y es que si en lugar de usar una imagen yo quiero usar un "GiF" o un "MP4" y por que no alternados que debo de hacer, bueno le agradezco de antemano su atención y me despido no sin antes desearles que tengan un excelente día.

  13. este tutorial es excelente, pero mi listado es muy grande, el problema es que la imagen se queda arriba, que puedo hacer?

    • Estimado Juan

      Posiblemente se pueda realizar lo indicado por medio de paneles

      https://www.excelintermedio.com/cuando-se-puede-utilizar-la-inmovilizacion-de-paneles-en-excel/

  14. Buenas Tardes::: he visto la Macro y me parece importante... solo que estoy buscando algo similar, pero en vez de Imágenes, me muestre información en texto. Por ejemplo al pisar el código me indique el correo en una celda y en otra celda el Numero de Teléfono del Empleado... Por favor si me puedes ayudar. deseo luego ampliar la información. solo quiero que me muestre la información en la medida que cambie de código... Gracias.

  15. Hola muy buenas tardes quisiera saber si se puede utilizar esta macro o como modificarla para que en lugar de jpg me muestre archivos pdf no se si se pueda y de ser asi alguien me puede decir como lo hago

  16. Hola muy buenas tardes quisiera saber si se puede utilizar esta macro o como modificarla para que en lugar de jpg me muestre archivos pdf no se si se pueda y de ser asi alguien me puede decir como lo hago

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    On Error Resume Next
    If Not Intersect(Target, Range("A2:A26")) Is Nothing Then
    Image1.Picture = _
    LoadPicture(ActiveWorkbook.Path & "\imagenes\" & Target & ".jpg")
    End If

    End Sub

  17. como puedo hacer un formulario para mostrar imagenes copiadas en el archivo excel y no ubicarlos de imagenes jpg

    • Si la imagen ya esta insertada en excel, la puede manipular por medio "shapes" ....por ejemplo puede hacer:

      Sub Macro2()
      Dim w As Worksheet
      Set w = ActiveSheet

      w.Shapes.Range(Array("Picture 1")).Top = 100
      w.Shapes.Range(Array("Picture 1")).Left = 100

      End Sub

  18. Cordial saludo desde Colombia, muchas gracias por la explicación, muy clara. SIn embargo Quisiera saber si es posible una macro donde se pueda insertar y ocultar varias imagenes en diferentes celdas de acuerdo a valores buscados con la formula buscarv. Ejemplo: Que aparezcan las fotografias de jugadores de futbol de acuerdo al equipo seleccionado. Mucha gracias.

  19. Excelente... Acondicione el ejemplo enviado en Excel y me funciono de una... Gracias!

  20. Como podria hacer si tengo el nombres en la hoja 1 y el macro lo necesito en la hoja 2

Página de comentarios 1 de 2
1 2

Deja una respuesta

Los campos requeridos estan marcados con *.