Cómo crear un catálogo de imágenes en Excel

Las personas utilizan Excel para almacenar diversos tipos de información y en muchas ocasiones dicha información necesita tener una imagen asociada por lo que se hace necesario crear un catálogo de imágenes en Excel que pueda estar vinculado a nuestra base de datos.

Crear el catálogo de imágenes en Excel

Existen diversos métodos para crear un catálogo de imágenes en Excel. Algunos usuarios de Excel prefieren implementar el catálogo incrustando la imagen asociada a cada registro dentro de la hoja de Excel. Sin embargo, si tienes una base de datos con muchos registros terminarás con un libro de Excel excesivamente grande por el tamaño de las imágenes lo cual dificultará su manejo.

Siempre recomiendo utilizar un método con VBA porque eso nos permite dejar los archivos de las imágenes en una carpeta local del equipo y solamente cargar las imágenes conforme son utilizadas dentro de nuestra base de datos de Excel.

La clave para crear el catálogo de imágenes

La clave para tener un catálogo de imágenes en Excel es tener una hoja donde se relacione la “llave primaria” de nuestros registros con la imagen correspondiente. Si no estás familiarizado con el término “llave primaria” te recomiendo leer el artículo Diseño de bases de datos.

En el siguiente ejemplo podrás observar que tengo una lista de 5 películas en Blu-ray y cada una de ellas tiene una clave de producto única.

Cómo crear un catálogo de imágenes en Excel

Las imágenes de cada producto estarán guardadas dentro de un directorio llamada “imagenes” y tendrán el mismo nombre que el código de producto al que pertenecen. El tener las imágenes con el mismo nombre que la clave del producto facilitará su manipulación en gran manera.

Repositorio de imágenes para catálogo en Excel

Insertar un Control de imagen

Para poder observar la imagen de cara producto insertaré un Control de imagen que es un tipo de control ActiveX. Para hacerlo debo ir a la ficha Programador y en el botón Insertar seleccionar el control adecuado.

Control de imagen para catálogo de imágenes en Excel

El Control de imagen se verá de la siguiente manera:

Control de imagen dentro del catálogo de imágenes en Excel

Crear la macro para mostrar imagen

Para este ejemplo haré que la imagen se muestre al momento de seleccionar una celda de la columna Código y para ello utilizaré el evento Worksheet_SelectionChange. Haz clic derecho sobre el nombre de la hoja y selecciona la opción Ver código y dentro del Editor de Visual Basic selecciona el evento SelectionChange. A continuación podrás ver el código VBA para dicho evento:

Macro para catálogo de imágenes en Excel

La parte importante de este código es que cuando seleccionamos cualquier celda dentro del rango A2:A6 se modificará la propiedad Picture del objeto Image1. La instrucción LoadPicture es responsable de cargar la imagen almacenada en nuestro disco duro local:

LoadPicture(ActiveWorkbook.Path & "\imagenes\" & Target & ".jpg")

La instrucción ActiveWorkbook.Path devuelve el directorio actual del archivo Excel y le concatena el directorio “imagenes” que es donde se encuentran nuestros archivos. Posteriormente se concatena la variable Target que contiene el valor de la celda seleccionada y se agrega la extensión de lo archivos de imagen que para nuestro ejemplo son archivos JPG.

Probando el catálogo de imágenes en Excel

A continuación probaré que la macro recién creada funciona correctamente pata nuestro catálogo de imágenes en Excel:

Ejemplo de catálogo de imágenes en Excel

Existen variantes sobre este método y seguramente en otro artículo tendremos la oportunidad de explorar diferentes métodos para mostrar las imágenes asociadas a un registro de nuestra base de datos en Excel.  Para continuar con las pruebas puedes descargar el libro de trabajo utilizado junto con las imágenes de ejemplo.

Artículos relacionados
Introducción a las macros

37 comentarios en “Cómo crear un catálogo de imágenes en Excel

  1. dennis

    muy buenos aportes los felicito a mejorar dia a dia con esta gran herramienta como lo es excel

  2. victor ceron

    Excelente tema en estos ultimos dias estaba buscando como hacer un catalogo de mis refacciones y esta es la respuesta. Muy buen aporte.

  3. kevin

    esta macro no me funciono y copie el codigo y realize paso por paso

    1. Moisés Ortíz Autor

      Hola Kevin, si copias el código a tu propio archivo debes asegurarte de modificar la línea de código donde se especifica la carpeta de las imágenes. En este ejemplo estoy suponiendo que las imágenes están en un directorio llamado “imagenes” que se encuentra en la misma ubicación que el archivo Excel. También estoy suponiendo que todas las imágenes están en formato JPG.

  4. Carlos

    Excelente post!

  5. Juan Carlos

    Definitivamente, con cosas sencillas se pueden lograr grandiosos impactos. Excelente!

  6. Alfredo

    Es grandioso el apoyo y las enseñanzas que aportan al mundo. Gracias exeltotal y si hay que apoyar en algo cuenten conmigo. Atte. Alfredo Ruiz Aguilar

  7. Temo

    Super bien. Ya tengo varias aplicaciones para este Catalogo

  8. Amadeus

    Excelente idea! gracias por compartirla

  9. Wilmer Carias

    Yo hice el catalogo de imágenes, pero al compartirlo con otras personas, tanto via e-mail, como a través de una red, ellos no pueden ver las imágenes. como se podria hacer?

    1. Moisés Ortíz Autor

      Hola Wilmer, las imágenes deben estar colocadas en una carpeta compartida en la red y además hacer las modificaciones a este ejemplo para que Excel muestre las imágenes desde dicho repositorio en la red. Aunque si mandas el archivo Excel a alguien que está fuera de la red, esa persona no podrá ver las imágenes.

  10. Aldo Cerezo

    Hola, ya cargué el código en la hoja y todo los pasos los seguí, pero no hacía nada, entonces sé que la primera línea es para que al momento de un error no haga nada, se la quité para ver cuál es el error y efectivamente tiene un error, el cual me dice: Se ha producido el error ’75’ en tiempo de ejecución. Error de acceso a la ruta o archivo. A qué se debe?

    1. Moisés Ortíz Autor

      Hola Aldo, no está reconociendo el directorio donde están almacenadas la imágenes. Revisa que esté bien escrito o renombra el directorio y haz el cambio pertiente en el código.

  11. javier caicedo

    Excelente idea gracias por compartirla

  12. GUILLERMO

    SUPER. GRACIAS POR EL APORTE

  13. Juan Carlos

    Muy buenos los aportes que tienen en esta página, es la primera vez que entro y si me pudo ayudar en lo que estaba queriendo hacer con una base de datos que estoy creando. Muchas felicidades por esta pagina.

  14. Yon M.

    Excelente, muy buen aporte muy fácil y didáctico. Gracias por compartir sus conocimientos sobre Excel.

  15. DMARCE

    Muy buenas sus explicaciones. Todo lo hacen ver fácil, muchas gracias!

  16. Alejandro

    Muchas gracias por el aporte , Fue de gran ayuda.

  17. Zuleima Rodriguez

    Hola! Muy buen ejemplo! Yo lo intente, pero al momento de guardarlo me dice este mensaje: “Las siguientes características no se pueden guardar en libros sin macros: Proyecto de VB. Para guardar archivo con estas características, haga clic en NO y, a continuación, elija un tipo de archivo habilitado para macros”. Me comentaron que tenia que habilitar las macros de mi Excel ya lo hice y aun sigue con ese mensaje. Espero su respuesta. Saludos.

    1. Moisés Ortíz Autor

      Hola Zuleima, normalmente guardamos nuestro trabajo de Excel como un “Libro de Excel”, pero cuando utilizamos código VBA debemos guardarlo como un “Libro de Excel habilitado para macros”. Para hacerlo debes ir a Archivo > Guardar como, y en la opción Tipo seleccionar “Libro de Excel habilitado para macros”.

  18. Sergio Quijano

    muy buen bueno funciona a la perfección!!!

  19. Janeth

    Hola,use tu ejemplo y me funciono perfectamente bien,solo hay un detalle, como puedo hacer que cuando no encuentre el código que ingreso me desaparezca la ultima imagen? esto debido a que aun no tengo todas las fotografías que requiero. Si pudieran ayudarme se los agradecería mucho.

    1. Moisés Ortíz Autor

      Hola Janeth, puedes controlar la visibilidad de la imagen con su propiedad Visible. Para ocultar la imagen utiliza la instrucción: Image1.Visible = False. Sin embargo es necesario condicionar la ejecución de esta instrucción ya que si la colocas directamente en la macro de ejemplo, entonces el control de imagen siempre estará oculto. Para eso debes validar la existencia real del archivo y eso lo puedes lograr con un código como el siguiente:

      If Dir(“C:\users\moises\documents\ejemplo.txt”) “” Then
      ‘El archivo existe
      Image1.Visible = True
      Else
      ‘El archivo NO existe
      Image1.Visible = False
      End If

  20. oscar

    Excelente me funciono a la perfección pero el problema que me surgió es que las fotos quedaron como con zoom o por el tamaño solo muestra una parte de ellas, como ajustar el tamaño al cuadro de imagen activex?

    1. Moisés Ortíz Autor

      Hola oscar, utiliza la propiedad AutoSize:
      Image1.AutoSize = True

  21. Douglas

    Moisés, utilice el código del ejemplo para un catalogo de imágenes que necesitaba. Todo funciona bien excepto que el archivo de excel crece desproporcionadamente sin relación alguna al tamaño de las imágenes que estoy utilizando. Como estoy utilizando mas de una hoja en el libro, es como si por cada una de ellas cargara la cantidad total de imágenes de la carpeta que las contiene. ¿Hay alguna forma de evitar esta situación?

    1. Moisés Ortíz Autor

      Hola Douglas, las imágenes no se cargan todas al mismo tiempo sino hasta que se activa el evento SelectionChange, pero aún así, si se cargan muchas imágenes será inevitable que Excel deje de responder adecuadamente. Si utilizas una gran cantidad de imágenes, en lugar de utilizar el control Imagen deberías crear un hipervínculo a cada una de ellas para que se abran con el visor de imágenes de Windows.

  22. Orlando

    Moises. muy buena tu pagina.Quiero saber si al insertar una imagen en excel esta se ajuste a mi cuadro de imagen no importando el tamaño del catalogo de imágenes o en su defecto al final de una fila de datos aparezca una foto pequeña y al pasar el ratón esta se haga grande.

    1. Moisés Ortíz Autor

      Hola Orlando, la imagen no se ajustará al tamaño del control. La única opción que tenemos es hacer que el control muestre la totalidad de la imagen con la propiedad AutoSize. La segunda opción que mencionas no es posible, pero se me ocurre agregar un comentario a la última celda y que al activar dicho comentario se muestre la imagen. Puedes ver un ejemplo de un comentario de celda con una imagen en el siguiente artículo:
      http://exceltotal.com/comentarios-en-celdas-de-excel/

      Si quieres automatizar la creación de comentarios con imágenes de fondo puedes utilizar la siguiente instrucción VBA:
      Range(“A1″).Comment.ShapeRange.Fill.UserPicture “C:\imagenes\ejemplo.jpg”

  23. Mauricio

    Hola estoy usando este ejemplo, pero necesito que sin imagen cuando esta no exista.

    1. Moises Ortiz Autor

      Hola Mauricio, revisa mi respuesta a Janeth (cuatro comentarios míos hacia arriba) donde he pegado el código para validar la existencia de la imagen y si no existe ocultar el control Image.

  24. Pedro

    Hola Muchas gracias por tus Post son muy buenos, tengo una duda que es la siguiente, ¿Puedo mostras más de una imagen para un mismo codigo? como diferentes tomas de un mismo producto. De antemano gracias, Saludos.

    1. Moises Ortiz Autor

      Hola Pedro, en ese caso tendrás que agregar más controles Image de manera que cada control muestre una imagen diferente.

  25. Manuel

    Hola. Muchisimas graciasp por tus enseñanzas. Estoy aprendiendo un montón. Te explico. Yo tengo una BBDD de móviles y al cambiar el valor de una celda, quiero que la imagen del móvil cambie también. Usando tu rango y posteriores añadidos, funciona genial, es fantástico, pero necesito que cambie con el valor de la celda. Qué evento tendría que usar en tu fórmula para conseguirlo? Muchas gracias por tu ayuda.

    1. Moisés Ortíz Autor

      Hola Manuel, en ese caso debes utilizar el evento Worksheet_Change y la referencia de la celda modificada estará en la variable Target.

  26. Victor Benil

    Genial esta el ejemplo