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

41 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
  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

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>