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.
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"
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.
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)
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.
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
25/11/2013 a las 7:41 pm
desafortunadamente no m salio el ejemplo ojala m pudieras enviar un archivo de ejemplo m pide q cree una macros???
05/05/2014 a las 2:23 pm
hola , necesito lograr que la imagen cambie en relacion a la informacion de 1 celda, sin necesidad de hacer click en la celda. saludos
11/09/2014 a las 10:37 am
roberto si lograste hacer esto, acesorame porfavaor..! 😉
27/07/2018 a las 10:00 am
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
21/10/2019 a las 8:01 pm
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.
16/04/2020 a las 12:40 pm
me podrias ayudar, no logro hacerlo
21/10/2019 a las 8:10 pm
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
21/10/2019 a las 8:15 pm
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
14/06/2014 a las 10:14 am
Como puedo hacer que la imagen siga a la celda seleccionada??
05/05/2020 a las 11:44 pm
Como puedo hacer que la imagen siga a la celda seleccionada??
14/06/2014 a las 6:03 pm
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.
09/09/2014 a las 7:53 pm
NO ME FUNCIONO TU CODIGO, ME MARCO ERROR, PERO SE ATORA EN LA SIGUIENTE:
LoadPicture(“C:\FOTOS” & Target & “.jpg”)
PODRAS AYUDARME..? 😉
09/09/2014 a las 7:48 pm
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...!
21/09/2014 a las 4:20 pm
Hola como tendria que hacer si por ejemplo quisiera que cargue todas las imagenes que empizan con MJ*.jpg
14/10/2014 a las 6:27 pm
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
11/03/2015 a las 12:41 pm
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..
16/04/2015 a las 3:39 pm
En vez de 'Worksheet_SelectionChange' usa 'Worksheet_Change' y lo demás igual.
16/04/2015 a las 3:37 pm
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.
11/07/2015 a las 9:37 am
¿cómo sería si quisieras extraerlos de algun directorio web?
el codigo de laimagen coincide con el codigo en excel.
Saludos.
30/06/2016 a las 2:06 pm
hola me marca error y se atora aqui:
Image1.Picture = _
LoadPicture("C:\Users\Liu-Gong\Desktop\CATALOGO\" & Target & ".jpg")
07/09/2016 a las 10:17 am
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.
03/01/2017 a las 10:38 pm
este tutorial es excelente, pero mi listado es muy grande, el problema es que la imagen se queda arriba, que puedo hacer?
04/01/2017 a las 10:16 am
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/
11/03/2017 a las 5:12 pm
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.
23/03/2017 a las 2:08 pm
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
23/03/2017 a las 2:14 pm
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
08/06/2017 a las 9:19 am
como puedo hacer un formulario para mostrar imagenes copiadas en el archivo excel y no ubicarlos de imagenes jpg
16/06/2017 a las 12:11 am
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
22/03/2018 a las 3:04 pm
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.
28/09/2018 a las 4:56 pm
Excelente... Acondicione el ejemplo enviado en Excel y me funciono de una... Gracias!
16/04/2019 a las 8:17 pm
Como podria hacer si tengo el nombres en la hoja 1 y el macro lo necesito en la hoja 2