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

51 pensamientos 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

    Responder
  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.

    Responder
  3. kevin

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

    Responder
    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.

      Responder
  4. Juan Carlos

    Definitivamente, con cosas sencillas se pueden lograr grandiosos impactos.

    Excelente!!!

    Responder
  5. Alfredo

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

    Responder
  6. Temo

    Super bien. Ya tengo varias aplicaciones para este Catalogo

    Responder
  7. Amadeus

    Excelente idea! gracias por compartirla

    Responder
  8. Wilmer Carias

    Yo hice el catalago de imagenes, pero al compartirlo con otras personas, tanto via e-mail, como a traves de una red, ellos no pueden ver las imagenes.

    como se podria hacer?

    Responder
    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.

      Responder
  9. Diego

    Hola, excelente post, te cuento que cuando llego a la fila numero 54 la caratula continua saliendo al principio de la pagina, es decir que tengo que subir al inicio de la pagina excel para poder ver la caratula, hay alguna manera de hacer que al mismo tiempo que voy agregando peliculas la caratula me salga mas o menos a la misma altura, para no estar llendo cada dos por tres al inicio de la pagina para poder visualizar la caratula, gracias.

    Responder
    1. Moisés Ortíz Autor

      Hola Diego, sería posible pero excesivamente complejo hacer lo que comentas. Sería mejor utilizar un método diferente. Voy a tomar en cuenta tu comentario para crear otro artículo donde se pueda visualizar la imagen de un registro sin necesidad de estar “subiendo” al inicio de la página.

      Responder
      1. Freddy Pineda

        Hola,
        Primeramente quiero comentar que son muy buenos los aportes que haces, yo soy autodidacta y aprendo mucho de post como estos y manuales.
        Una solución a la consulta de Diego es agregar la siguiente línea despuúes de la parte donde se carga la imagen:

        Image1.Top = ActiveCell.Row * ActiveCell.RowHeight

        Y de esta forma la imagen “sigue” a la celda activa.

        Responder
        1. Moisés Ortíz Autor

          Excelente idea Freddy. Funciona a la perfección.
          Recibe un saludo.

          Responder
  10. Aldo Cerezo

    Hola, ya carqué 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?

    Responder
    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.

      Responder
  11. javier caicedo

    Excelente idea gracias por compartirla

    Responder
  12. GUILLERMO

    SUPER
    GRACIAS POR EL APORTE

    Responder
  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.

    Responder
  14. Yon M.

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

    Responder
  15. DMARCE

    Muy buenas sus explicaciones… todo lo hacen ver fácil, muchas gracias!!

    Responder
  16. Leo

    Buen Articulo.
    Realice una prueba pero no funciona. No se que puede estar mal.

    Aca el codigo: (El directorio de imagenes esta en la misma carpeta que el archivo excel)
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    On Error Resume Next
    If Not Intersect(Target, Range([C2:C500000])) Is Nothing Then
    Image1.Picture = _
    LoadPicture(ActiveWorkbook.Path & “catalogo fotografico” & Target & “.jpg”)
    End If

    End Sub

    Agradecido de su ayuda.

    Responder
    1. Moisés Ortíz Autor

      Hola Leo, reemplaza los corchetes cuadrados ([]) por dobles comillas de la siguiente manera: Range(“C2:C500000″)

      Responder
  17. Fausto V

    Primero , que buena pagina, ya estoy aprendiendo a realizar macros, a sido de gran ayuda, solo que tengo un problema.
    Al momento de realizar la prueba me arrojo el siguiente error de compilacion.

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    On Error Resume Next
    If Not Intersect(Target, Range(“A2:A281″)) Is Nothing Then
    Image1.Picture = _
    LOADPICTURE(ActiveWorkbook.Path & “imagenes” & Target & “.png”)

    “El numero de argumentos es incorrecto o la asignación de propiedades no es valida.”
    En mi caso, trabajo con imágenes en formato Png, y me señala en azul la palabra Target.

    También como dato, no todos los números que tengo en mi listado se encuentran, es decir solo un 50 % se encuentran en la carpeta, no se si esto afecte.
    Gracias de antemano.

    Responder
    1. Moisés Ortíz Autor

      Hola Fausto, no estás incluyendo las diagonales invertidas en el directorio “imagenes”. Eso es necesario para que Windows encuentre los archivos.

      Responder
  18. Mauricio Vilchis

    Muy buen aporte funciona a la perffección… por cierto si alguien quiere que la foto se mantenga mientras te desplazas por una lista enorme de codigos, solo “paraliza las celdas” superiores :-)

    Responder
  19. Alejandro

    Muchas gracias por el aporte , Fue de gran ayuda.

    Responder
  20. 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

    Responder
    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”.

      Responder
  21. Sergio Quijano

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

    Responder
  22. Janeth

    Hola,use tu ejemplo y me funciono perfectamente bien,solo hay un detalle, como puedo hacer que cuando no encuentre el codigo que ingreso me desaparesca la ultima imagen????,esto devido a que aun no tengo todas las fotografias que requiero. Si pudieran ayudarme se los agradeceria mucho.

    Responder
    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 siguiente instrucción:
      Image1.Visible = False

      Creo que sería conveniente ocultar la imagen en todo momento y solamente hacerla visible si no existe error alguno al cargar la imagen.

      Responder
      1. Sara

        Hola, tengo el mismo problema que Janeth, el caso es que no voy a tener nunca esas imágenes y necesito saber cuales no están. Usando lo que dijiste de Image1.Visible = False, me oculta siempre la imagen, esté o no. Cómo puedo hacer para ver realmente si esa imagen no existe?
        Un saludo, gracias.

        Responder
        1. Moisés Ortíz Autor

          Hola Sara, creo que mi respuesta a Janeth no fue muy completa. Es necesario condicionar la ejecución de la instrucción Image1.Visible = False 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

          Responder
          1. Sara

            Gracias, gracias, gracias y mil gracias! Funciona a la perfección y es exactamente lo que quería! Con gente como tu da gusto buscar información. Sigue así, tienes un blog increíble.
            Saludos

  23. oscar

    Excelente me funciono a la perfeccion pero el problema que me surgio 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???

    Responder
    1. Moisés Ortíz Autor

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

      Responder
  24. 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?

    Responder
    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.

      Responder
  25. 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.

    Responder
    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”

      Responder
  26. Mauricio

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

    Responder
    1. Moises Ortiz Autor

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

      Responder
  27. 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.

    Responder
    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.

      Responder
  28. Omar

    Hola Moises, tus tips son excelentes. Me ayudan muchismo.
    Quisiera que me orientes en lo siguiente si fueras tan amable.
    Yo tengo un inventario de productos separados en CODIGO, PRODUCTO y PRECIO en la hoja INVENTARIO.
    Tambien he creado un pequeño motor de busqueda en la Hoja BUSQUEDA, para que cada vez que escriba el nombre en la celda C5 o palabras relacionadas al producto que busco, excel me arroje los resultados en
    A1= codigo
    B1= Producto
    C1= precio
    La pregunta seria Como hago para que la imagen se cambie automáticamente, en relación a la celda A1, sabiendo que esta celda cambia de valores automáticamente al hacer una búsqueda nueva.
    Gracias de antemano

    Responder
    1. Moisés Ortíz Autor

      Hola Omar, no me das muchos detalles sobre cómo funciona tu “motor de búsqueda”, pero deberás decidir el evento que dispara la actualización del control Image. Si la búsqueda se hiciera al pulsar un botón, entonces debes incluir el código de actualización en dicho bloque de código. Si la búsqueda se hace al modificar el valor de alguna celda, entonces deberás utilizar el evento Worksheet_Change y monitorear específicamente la celda que sufre el cambio para disparar la actualización de la imagen.

      Responder
  29. 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.

    Responder
    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.

      Responder
  30. Victor Benil

    Genial esta el ejemplo

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>