Catálogo de Imágenes en Excel – otra versión

sábado, mayo 02, 2009

Crear catálogos de imágenes en Excel es uno de los temas más consultados en este blog. Hace un poco más de dos años y medio publiqué la primer nota sobre base de datos de imágenes que se convirtió en una de las más leídas del blog.

La técnica empleada para crear el catálogo de imágenes en Excel no es trivial y a principios de este año publique una nota aclaratoria que incluye un enlace para descargar una animación del proceso.

Además de los problemas potenciales que señalaba en la nota original, si guardamos las imágenes en el cuaderno, tal como muestra la técnica empleada en la nota original, el archivo tiende a volverse muy “pesado”, en especial si guardamos imágenes de alta resolución.

En esta nota mostraremos una técnica distinta, donde las imágenes están guardadas en alguna carpeta del sistema (computador personal o red) y sólo usamos Excel para mostrarlas de acuerdo a un número de código que se haya elegido en alguna celda.

Empezamos por guardar las imágenes en una única carpeta. Por comodidad las pondré en D:\catalogo



Catálogo de Imágenes en Excel

En el siguiente paso construimos el cuaderno Excel que tendrá dos hojas, Lista y Catalogo.
Como su nombre indica, en la primer hoja pondremos la lista de imágenes pero en lugar de guardar la imagen en la hoja pondremos la referencia a la dirección en el sistema



Catálogo de Imágenes en Excel

Podemos ver que los valores en la primer fila no son números de código y dirección en el disco duro. La función de estos valores será explicada más adelante.

Ahora creamos dos rangos dinámicos que encapsularemos en dos nombres

imagenes =DESREF(Lista!$A$1,0,0,CONTARA(Lista!$A:$A),1)

path_imagenes =DESREF(Lista!$A$1,0,0,CONTARA(Lista!$A:$A),2)

Estos nombres se adaptan automáticamente a la cantidad de filas en la lista usando la técnica que ya hemos mostrado en varias oportunidades. “Imagenes” se refiere al rango de la columna A que contiene valores; “path_imagenes“ se refiere al rango A:B con el número de filas correspondiente. Estos nombres serán usados en la hoja “Catalogo” donde mostramos las imágenes.

En la hoja Catalogo creamos una lista desplegable usando la opción Lista de Validación de Datos


Catálogo de Imágenes en Excel

Los valores de la lista desplegable están definidos por el rango dinámico “imagenes”

Catálogo de Imágenes en Excel

Como pueden ver, el primer valor de la lista sirve como indicación al usuario qué es lo que tiene que hacer. Los valores de la lista desplegable sirven como argumentos en para la función BUSCARV que ponemos en la celda C3
=BUSCARV(A3,path_imagenes,2,0)
Esta fórmula da como resultado la dirección de la imagen (que pusimos en la hoja Lista).

Nuestro próximo paso es poner en la hoja un medio de mostrar la imagen correspondiente al código que hayamos elegido. Activamos la barra de herramientas Cuadro de Controles y elegimos el control Imagen



Catálogo de Imágenes en Excel

Ponemos el control en una posición cercana a la lista desplegable y para mejorar el aspecto de la hoja quitamos las líneas de división. La posición del control no es casual y nos sirve para ocultar la fórmula que hemos puesto en C3.


Catálogo de Imágenes en Excel

Ahora necesitamos un método para cargar la imagen correspondiente, lo que haremos con una macro, y un evento que haga correr la macro cuando el usuario elige un número de código.

Sub show_pic() es la macro para cargar la imagen en el control


Sub show_pic()

Dim PicAddress

PicAddress = Sheets("Catalogo").Range("C3").Value

If IsError(PicAddress) Then
Sheets("Catalogo").Image1.Picture = Nothing
Else
Sheets("Catalogo").Image1.Picture = LoadPicture(PicAddress)
End If

End Sub

Esta macro va en un módulo común del editor de VBa.
Para que la macro corra cuando se elige un número de código programamos este evento en el módulo de la hoja Catalogo

Private Sub Worksheet_Change(ByVal Target As Range)
Dim celControl As Range

Set celControl = [A3]

If Union(Target, celControl).Address = celControl.Address Then show_pic

End Sub


Elegimos un número de código en la lista desplegable, lo que dispara la macro que carga la imagen correspondiente en el control


Catálogo de Imágenes en Excel

La ventaja de esta técnica reside en que al no guardar las imágenes en un cuaderno de Excel, éste es muy estable y nos permite usar imágenes de alta resolución.

Finalmente agregaremos dos mejoras a nuestro modelo. Tenemos que evitar que el usuario guarde el cuaderno con una imagen cargada en el control. Esto puede suceder de dos maneras:

1 – que el usuario intente cerrar el cuaderno y Excel le pida guardarlo antes de cerrarlo (y que el usuario decida guardarlo)

2 – que el usuario decida guardar el cuaderno por propia iniciativa.

La idea no es evitar que el usuario guarde el cuaderno, sino que al hacerlo no haya ninguna imagen cargada en el control.
Para lograr esto programamos dos eventos en el objeto ThisWorkbook


Catálogo de Imágenes en Excel


Workbook_BeforeClose

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Catalogo").Image1.Picture = Nothing
Sheets("Catalogo").Range("A3").ClearContents
End Sub


Workbook_BeforeSave

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Sheets("Catalogo").Image1.Picture = Nothing
Sheets("Catalogo").Range("A3").ClearContents
End Sub


El ejemplo se puede descargar aquí. Para que el modelo funcione hay que reemplazar los valores del rango A2:B6 por referencias a archivos que existan en el computador o red del usuario.



Technorati Tags:

95 comments:

Anónimo,  02 mayo, 2009 21:43  

Disculpa la molestia pero donde uso e inserto path_imagenes y donde pongo la primera macro porque hice todo dudando de lo anterior y no me funciona gracias

CómoseAC 02 mayo, 2009 22:04  

Hola que tal, oye estoy encantado con tu blog, dale una visita al mio por hay tengo una catalago en excel (yo lo hice :D) te invito a conocer www.comoseac.blogspot.com me gustaria me enseñaras a poner un icono para cerrar excel con un boton. Espero puedas ayudarme con eso. muchas felicidades por el blog. te saludo desde Chiapas, México

Raulsvl 03 mayo, 2009 19:09  

Muchas gracias por esta nota, es muy buena y esta muy mejorada porque la verdad si estaba algo tardado con la otra tecnica,gracias...

Jorge L. Dunkelman 03 mayo, 2009 20:10  

path_imagenes es un rango dinámico definido como nombre. Lo defines con Insertar--Nombres--Definir.
La macro va en un módulo común del editor de Vba, como está señalado en la nota.
Si no estás familiarizado con el uso de nombres en Excel, puedes leer esta nota en el blog.

Iván,  11 mayo, 2009 08:43  

Hola...

Mucho gusto, siempre encantado de leer las nuevas técnicas que aplicas a excel.

Te quería hacer un comentario, respecto de esta nota. Sucede que "Anónimo", tiene razón, ya que en ningún lado ocupas el nombre que has definido como "path_imagenes".

Por otro lado, dentro del macro Sub_pic(), haces referencia a la selección de la celda C3, en la hoja catálogo. Como está tapada con la "imagen", no se puede saber qué es.

Estimé que ahí hacías referencia a la ubicación de la imagen... Utilizando un la siguiente fórmula, en la celda C3, llamo a la dirección de la imagen.

buscarv(A3;path_imagenes;2;falso)

Pero aún así, no aparece la imagen.

Estuve viendo la posibilidad de reemplazar =INCRUSTAR("Forms.Image.1";""), por =sub_pic(), tampoco responde.

Creo que la magia está tras esa celda C3.

Saludos y muchas gracias.
Iván

Iván,  11 mayo, 2009 09:43  

Hola de nuevo.

Bueno, como estimaba en la celda C3, va la dirección de la imagen.

Pero se presenta el error 481, cuando la imagen tiene extensión diferente a BMP.

Supongo que para solucionar el problema requiere actualización de excel.

Saludos
Iván

Jorge L. Dunkelman 11 mayo, 2009 18:49  

Efectivamnete, al copiar la nota al blog deje de lado todo un párrafo donde explico el uso del nombre "path_imagenes".
Mil disculpas a los lectores y en breve estaré corrigiendo la nota.

Jorge L. Dunkelman 11 mayo, 2009 19:19  

Respecto al error 481 creo que la única solución es cambiar la propiedad de la imagen, como señala Microsoft:
Este problema se produce si intenta establecer la propiedad Picture de un formulario de usuario, ya sea manualmente o mediante programación, en un archivo WMF, PICT, EMP, EPS, GIF, JPEG, TIFF o PNG. Para resolver este problema, establezca la propiedad de imagen en un gráfico BMP.

Anónimo,  15 mayo, 2009 19:55  

Sr.Jorge Dunkelman,
Hace poco entré a trabajar en un lugar donde tienen el excel 2007, quisiera hacer graficos dinámicos (Seleccionar un producto y que automáticamente cambie los datos del grafico), usted hizo un ejercicio parecido pero para excel 2000, tengo problemas en la conexión en el Nombre y el Grafico. Una sugerencia, todos los ejercicios son perfectamente utiles pero podría migrarlos al 2007?. Muchas Gracias por su atención

Anónimo,  17 mayo, 2009 05:29  

Hola soy anonimo gracias yo tambien ya consegui hacer el catalogo, gracias tambien Ivan, Chau

Jorge L. Dunkelman 19 mayo, 2009 21:23  

El "motor" de gráficos de Excel 2007 funciona distinto de las versiones anteriores. Por eso no todas las técnicas de gráficos dinámicos que mostramos en el blog funcionan cuado se las aplica a Excel 2007. En el futuro me estaré ocupando del tema.

Proyecciones Zero 23 mayo, 2009 01:54  

Hola: Mira te hago una Pregunta acerca de Excel, sabes que trabajo en una empresa de seguros (chica) y estoy tratando de solucionar un poco el tema de los vencimientos, por lo tanto hice una pequeña formula para que me muestre los dias restantes para que caduque dicha poliza, y estaba buscando la forma en que ese resultado me quede en el formato AA/MM/DD, se puede hacer algo asi. Desde ya agradezco tu tiempo y te felicito por tu Blog, muy bueno!!!

Saludos Roberto!

Jorge L. Dunkelman 25 mayo, 2009 22:02  

Pro supuesto, usando formato de números personalizado. Te sugiero que leas las notas del blog sobre tiempo y fechas en Excel, para familiarizarte con el tema.

Ricardo 22 julio, 2009 17:15  

Jorge, han sido muy interesantes todas las propuestas que ha presentado.
Quisiera saber si es posible conocer el archivo referente al Catálogo de imágenes de mayo de este año, ya que hay algunos comandos que no funcionan bien...
Con el archivo nos facilitaria tomarlo com plantilla y trabajar sobre este nuestro catálogo.
Gracias por su atención.

Jorge L. Dunkelman 22 julio, 2009 18:29  

Ricardo,

ponte en contacto conmigo por mail

Michel 11 agosto, 2009 01:51  

Saludos Jorge,Quisiera Saber si hay alguna manera de que al hacer la ruta de las imagenes, estas no requieran que se les asigne una unidad, esto por si es grabado en un usb y la pc no le asigna la misma letra de Unidad.

Jorge L. Dunkelman 12 agosto, 2009 18:48  

Michel

no me queda claro que quieres decir con asignar una unidad a las imágenes. El número que aparece en la columna A es un código que está ligado a la idercción de la imagen. Puede ser cualquier combinación de números y letras, puede ser la descripción de imagen, etc.

Anónimo,  19 agosto, 2009 02:30  

ya me aparece la imagen, pero a la hora de cambiar el valor no me actualiza la imagen, se queda en la misma.

no supe como usar

imagenes =DESREF(Lista!$A$1,0,0,CONTARA(Lista!$A:$A),1)


path_imagenes =DESREF(Lista!$A$1,0,0,CONTARA(Lista!$A:$A),2)


asi que solo use

=BUSCARV(C4;lista!A:B;2;0)

yo estoy usando c4 en lugar de c3, no le veo problema, pero no se como hacerlas dinamicas. y ya cheque tus otros articulos

Jorge L. Dunkelman 19 agosto, 2009 19:11  

Fijate en los comentarios del 11 de mayo de Iván (y mis respuestas). Creo que se trata del mismo problema. En cuanto al uso de "imagenes" y "path_imagenes" se trata de nombres (rangos dinámicos "encapsulados" en nombres). Si no estás familiarizado con el uso de nombres en Excel te sugiero leer esta nota.

Anónimo,  18 septiembre, 2009 01:28  

HOLA MIRA ESTA MUYY MUY BUENO TU PROGRAMA PERO SABES NO SE COMO PONER LAS IMAGENES YA ME SALE LA RUTA PERO LA IMAGEN NO Y ME MENDA ESTE ERROR
PicAddress = Sheets("Catalogo").Range("C3").Value
QUE PUEDO HACER

Jorge L. Dunkelman 18 septiembre, 2009 07:29  

Fijate si has seguido todos los pasos explicados en la nota, en especial si el código de los eventos está en el módulo correspondiente y no en un módulo general del editor de Vb.
N

Anónimo,  05 noviembre, 2009 02:19  

Hola que tal? bueno la solución es muy buena y ayuda muchisimo graciassss... pero me gustaria saber como quedaria el codigo, si quiero utilizar en la misma hoja cuatro imagenes diferentes y por su puesto tienen las correspondientes 4 listbox?
pdta: soy un principiante en Visual Basic...pero me gusta estudiarlo bastante....
disculpas por no identificarme, pero el blog presenta dificultades..

Jorge L. Dunkelman 05 noviembre, 2009 22:58  

En principio tienes que crear un código para cada cuadro.
En cuanto a identificarte es suficiente que pongas el nombre en el cuerpo del comentario, como hizo Michel por ejemplo.

Anónimo,  25 diciembre, 2009 22:21  

Hola Jorge L. a mi si que me funciona, pero no se me ven las imagenes completas.
Ej. tengo una imagen 1060 x 886.
Gracias por tu apoyo.
Un saludo.

Anónimo,  30 diciembre, 2009 15:15  

Hola soy Hangloose.

soy nuevo en esto de las macros y quería saber como diferenciar "modulo común del editor vBa" y "modulo de la hoja de catalogo".gracias

Feliz año!

Jorge L. Dunkelman 30 diciembre, 2009 17:17  

Hola Hangloose,
para acceder al módulo de la hoja lo más fácil es hacer clic con el botón derecho del mouse y activar la opción Ver Código. Esto abre el editor de Vb en el módulo de la hoja. Ua vez en el editor verás un panel en la parte derecha bajo el título Proyecto. Verás los objetos del cuaderno activo (Hoja 1, Hoja 2, etc. y también el objeto ThisWorkbook). Si hay módulos comunes estos aparecerán por general a continuación del icono de ThisWorkbook. Si no hay, puedes crearlos con el menú Insertar-Módulo.
En unas semanas espero empezar a publicar una serie de guías para principiantes, entre ellas Macros y Vba. Me encantará contarte entre mis primeros "clientes" :)

Anónimo,  04 enero, 2010 14:12  

Muchas gracias.Ya me funciona.Ya le echaré un ojo a las guías para principiantes;)

Un saludo,

Hangloose

Anónimo,  12 enero, 2010 17:23  

Estimado Jorge
Luego de saludarte,espero tengas tiempo para esta consulta. Yo tengo un imagenes en diferentes hojas y tu código para borrar las imagenes (antes de cerrar o guardar) solo funciona para una hoja (hoja catalogo). Mi pregunta es como hago para que desactivar las imagenes en diferentes hojas.
Agradezco tu atención y quedo a la espera de tus comentarios.
Saludos cordiales,
Carlos Mallma
Lima-Perú

Jorge L. Dunkelman 12 enero, 2010 20:34  

Hola Carlos,
cambiando la referencia a la hoja relevante. Por ejemmplo si tienes una hoja "Tornillos" en el evento correspondiente pones

Sheets("Tornillos").Image1.Picture = Nothing

Si tienes varias hojas, podés crear una referencia a cada una de las hojas.

Anónimo,  19 enero, 2010 14:23  

Hola Jorge, soy Hangloose de nuevo.Si cambio le pongo un nombre diferente a la hoja, x ejemplo de catalogo le llamo catalogo2, el programa no funciona.¿hay alguna solución para que el programa obtenga el nombre de las diferentes hojas que tenga en un libro?
Espero haberme explicado bien.
gracias

Anónimo,  19 enero, 2010 18:58  

Hola Jorge.

si cambio el nombre de la hoja ( en vez catalogo, le llamo x) entonces el programa no me funciona.¿hay alguna forma de que se refresque directamente o ponerlo del alguna forma general para que el programa pueda funcionar con diferentes hojas del libro de excel?
gracias,

Hangloose

Jorge L. Dunkelman 19 enero, 2010 21:38  

De hecho podemos suponer que que la hoja donde se muestra la imagen es la hoja activa, así que en lugar de una referencia explícita podríamos usar Activesheet.

Anónimo,  20 enero, 2010 11:11  

Perfecto...problema solucionado!
gracias

Hangloose

Anónimo,  17 marzo, 2010 07:36  

Hola impresionante este blog y guau traer imagenes por medio de codigos ufff, como muchos y como tu mismo algun dia, soy nuevo en el aprendizaje del excel, me sirve enormemente tu apunte pero necesito saber como puedo aumentar el tamaño de la imagen que sale en el archivo de excel

Gracias mil

Carlos Gonzalez

Jorge L. Dunkelman 17 marzo, 2010 08:50  

Carlos,
aumentando el tamaño del control.

Anónimo,  20 marzo, 2010 19:52  

Jorge si el problema era que no estaba activada la casilla de programador, ni la casilla de modo diseño, por lo tanto no lo lograba pero ya se pudo, Jorge creo que todo el mundo te lo dice pero pues te mereces todos los elogios, gracias espero poder seguir contando contigo, para estas dudas que a diario se presentan, por otro lado estuve en otro tema de tu blog que son los rangos dinamicos, y la funcion indirecto, y me sucede algo extraño que debe ser algo muy simple, pero a mi ya me ha cansado y no he encontrado solucion, resulta que cuando realizo las listas desplegables, las puedo nombrar, pero cuando coloco el se refiere a: si escribo la formula no me funciona, si doy click y escojo la(s) casilla(s) si, esto en el ejemplo que hacias sobre continente, paises, ciudades, que podra ser ? Gracias Jorge !!!!!

Jorge L. Dunkelman 20 marzo, 2010 21:10  

Te sugiero que sigamos el tema por línea privada. Puedes enviarme el archivo por mail.

Juan Munevar 15 abril, 2010 19:20  

Ok muy buena publicacion y opcion para el catalogo de imagenes, pues use el metodo inicial en mi empresa y pues logicamente el archivo se sobercargo con poca informacion debido a las fotografias. Con este metodo me parece mas facil. Lo probe en excel 2007 y funciono correctamente. Reportando el uso de tus metodos desde Colombia Juan Carlos Munevar.

Braulio Cid 19 abril, 2010 19:16  

Realmente agradecido de tu ayuda Jorge, he aprendido muchísimas cosas de Excel a partir de tu blog, y lo que más me impresiona es lo correcta y clara que es tu forma de explicar. Además, aplicando un poco de lógica a partir de tu entrada, es posible investigar por uno mismo, evitando así preguntar cada paso en los comentarios...

Continúa así por favor!

gatienso 12 mayo, 2010 22:45  

Jorge: Ante todo felicitaciones, su blog es EXCELENTE, he aprendido muchas cosas leyéndolo, este catálogo con fotos es algo que hace rato no podía resolver y gracias a Ud ya está funcionando. Dejo un tip para los que tengan imagenes de diferente tamaño como me pasa a mi, deben ingresar a las propiedades del control de imagen y en PctureSizeMode y en el desplegable elegir 3-fmPictureSizeZoom
Juan

Anónimo,  05 junio, 2010 01:14  

Me sale un error 424 y no jala la foto.
El link de la foto esta bien.

Jorge L. Dunkelman 05 junio, 2010 09:24  

¿Has creado los nombres (imagenes y path_imagenes)?

Anónimo,  05 junio, 2010 22:52  

Muchas Gracias por responder.

no supe como usar
imagenes =DESREF(Lista!$A$1,0,0,CONTARA(Lista!$A:$A),1)
path_imagenes =DESREF(Lista!$A$1,0,0,CONTARA(Lista!$A:$A),2)
asi que solo use
=BUSCARV(C4;lista!A:B;2;0)

Para los nombres hice lo siguiente me coloque en la columna y le puse nombre en el "cuadro de nombres"

Patricia Cortes
kitty_moon18@hotmail.com

Jorge L. Dunkelman 06 junio, 2010 15:17  

Tal como lo sospechaba, el problema está en la definición de los nombres. Tienes que definrilos con Insertar-Nombre-Definir (o Ctrl+F3) y poner la fórmula en la ventanilla "se refiere a".
Te sugiero que leas mi nota sobre el uso de nombres.

Jorge L. Dunkelman 09 junio, 2010 06:27  

Patricia,
tienes que mandar tus consutas por mail privado. Por favor, fijate en lo que pongo en el enlace de pa pestaña "Ayuda".

Anónimo,  19 junio, 2010 10:03  

Hola que tal si me puedes ayudar, tengo excel 2003 y lo que deseo es poner de forma automatica 4 fotos en una hoja lo hago de forma manual con la opcion =INCRUSTAR("Forms.image.1","") en la opcion Picture ... voy a la carpeta donde estan las fotos y funciona, puedo decirle mediante codigo que las fotos estan en la carpeta tal y las fotos se llaman Foto1, Foto2, Foto3, Foto4 y al abrir la hoja de excel las fotos esten actualizadas, gracias

Jorge L. Dunkelman 19 junio, 2010 18:43  

El código para hacerlo no es trivial y excede las posibilidades de un comentario.
En general, podrías escribir un código que le prgunte al usuario en qué carpeta están las fotos y cree los enlaces necesarios en la hoja Lista.

Anónimo,  13 julio, 2010 13:22  

Buenos dias, tengo el problema que usando el excel 2007 las imagenes no se ven en la vista preliminar ni tampoco salen impresas, mientras que en la version anterior de excel salen sin problema. Que puede estar pasando? Muchas gracias!

Jorge L. Dunkelman 13 julio, 2010 17:05  

No sabría decirte. Puedes intentar lo siguiente: abrir el modelo en Excel 2007, guardarlo y cerrar el Excel. Vlver a abrir el cuaderno y ver si funciona. También puedes mandarme tu cuaderno para que pueda revisarlo.

Anónimo,  31 diciembre, 2010 05:45  

deberian de colocar el ejemplo para visualizarlo bien ya q no e podido realizar el ejercico

gracias de antemano

Jorge L. Dunkelman 01 enero, 2011 09:37  

Acabo de colocar el enlace para descargar el cuaderno del ejemplo. A cambio te pido que le coloques "ue" a tu "q" y "h" a tu "e" :)

Anónimo,  15 abril, 2011 04:03  

Estan muy bien tus ejemplos sobre insertar fotografias Jorge,saludos Pedro p.desde España.Me gustaria,cuando puedas lo amplies para hacer catalogos,con la misma tecnica,pudiendo elegir los pixel de las imagenes o su tamaño,para poder hacer distintos tipos de catalogos.Asimismo tambien seria interasante,por ejemplo dar a un cliente una factura con 15 o 20 filas y cada una de sus fotos en la misma.saludos te sigo por el Blog,

KorkoBou 03 mayo, 2011 19:02  

Hola que tal Jorge excelente tu blog me ha ayudado mucho tengo una pregunta , a mi me yuda mucho este tipo de catalogo porque tengo que mostrar lo que lleva mi archivo con imagenes sin embargo esto no fuciona fuera de mi pc hay forma de hacerlo y que se pueda enviar por correo

Jorge L. Dunkelman 03 mayo, 2011 19:25  

¿Qué es lo que no funciona? Al usar el modelo en otra máquina o red, hay que modificar en el código las referencias a las imágenes, como pongo al final de la nota.

Anónimo,  03 mayo, 2011 19:26  

Hola Korko, puedes realizar un Archivo autoextraible con winrar, adjuntando en él, la carpeta de las Imagenes y el archivo de Excel. y asi cuando ejecute el Archivo autoextraible reconocera las Imagenes y las Mostrara

Anónimo,  08 junio, 2011 03:12  

Gracias Jorge Dunkelman. Mi nombre es Guillermo Moreno de la Ciudad de México.
Necesito crear 10 listas de códigos con una sola imagen en la misma hoja, y cada vez que se solicite cualquier imagen de cualquiera de los códigos la imagen se actualice.
¿Cómo le hago?. Saludos.

Jorge L. Dunkelman 08 junio, 2011 18:04  

Guillermo,
tal como muestro en esta nota o en la anterior (sin macros) mencionada.

Anónimo,  06 septiembre, 2011 00:51  

muy bueno tu blog,pero como podria hacerlo para hacer un catalogo pero en vez de poner un numero pueda seleccionar una foto y me enviara a otra hoja donde estubiera estos datos

Anónimo,  06 septiembre, 2011 00:52  

muy bueno tu blog,pero como podria hacerlo para hacer un catalogo pero en vez de poner un numero pueda seleccionar una foto y me enviara a otra hoja donde estubiera estos datos

Anónimo,  07 septiembre, 2011 16:58  

muchas garcias

Anónimo,  18 noviembre, 2011 04:50  

me sale error 53, coloco la raiz correcta y la imagen en la ubicacion correspondiente, sabes cual es el fallo?

gracias!

Jorge L. Dunkelman 18 noviembre, 2011 14:59  

El error 53 se produce cuando se hace referencia a un archivo que no existe.

Cristina Muratori 06 abril, 2012 13:49  

Hola Jorge, antes que nada ¡enhorabuena! por tu blog, es una gozada disponer de toda esta información y, sobre todo, de forma tan bien expuesta...
He seguido todos los pasos que indicas en esta entrada y me funciona a la perfección. ¿Cuál es mi problema? -principalmente que no me manejo bien con el VisualBasic, jeje- lo que pasa es que la macro está hecha con una referencia estática a una hoja, pero yo necesito que funcione para muchas (cada hoja corresponde con un cliente y, en cada una, se "inserta" una imagen... He dudado si exponer aquí mi duda-comentario o hacerlo por mail, ya me comentas si no he optado por la vía adecuada y/o si necesitas más datos...
Gracias!!!
Cristina
Sevilla - España

Jorge L. Dunkelman 06 abril, 2012 18:05  

Hola Cristina,
gracias por los conceptos. Te sugiero que sigamos la consulta por mail privado. Sería buena si me enviaras un ejemplo del cuaderno.

Anónimo,  30 julio, 2012 09:03  

Amigo necesito tu ayuda urgente, porque esto me esta dando un dolor de cabeza.
estoy tratando de desplegar una tabla dinamica en un formulario; los controles que estoy utizando son: Command Button, Image y UserForm En el formulario inserte un control "Image" casi del tamaño conveniente para mostrar la tabla dinamica y el Command Button esta independientemente visible en la hoja.
la idea es. El control "Image" permite incorporar graficos o imagenes importados de archivos externos a tu libro. El truco seria pues, exportar la Tabla Dinamica a mostrar, grabarlo como un archivo externo y luego mostrarlo.
Al activar el Command Button se debe desplegar el formulario con la imagen de la tabla dinamica. El codigo es el siguiente.
Option Explicit
Dim strRuta As String
Private Sub UserForm_Initialize()
strRuta = ThisWorkbook. Path & Application. PathSeparator & "Tabla. Gif"
End Sub

Private Sub UserForm_Activate()
Dim Tabla As PivotTable
Set Tabla = ActiveSheet. PivotTables("Tabla dinamica1"). PivotSelect
Tabla. Export strRuta, "GIF"
Image1. Picture = LoadPicture(strRuta)
Set Tabla = Nothing
End Sub

Private Sub Worksheet_Activate()
UserForm1. Show
End Sub

El error me marca en la siguiente linea "set tabla = activesheet pivottables("tabla dinamica3"). Pivotselect"

Atte.
Juan "Jazo"

Jorge L. Dunkelman 31 julio, 2012 18:26  

Juan, el código muestra el objeto PivotTables("Tabla dinamica1") pero en el error mostrás pivottables("tabla dinamica3"). ???
Además, porque ni mostrar y ocultar la tabla en la hoja? Podrías crear una imagen de la tabla dinámica usando la "cámara" (hay una nosta sobre el tema en el blog), y luego con un códgio sencillo podrías mostrarla y ocultarla según las circunstancias.
Otro tema es el control Control PivotTable (fijate en Additional Control en el ToolBox del Userform), que te permite incrustar una tabla dinámica con todas las funcionalidades en el userfor.

Luis G F 02 noviembre, 2012 10:22  

Muy bueno; tendrás algún tema de ayuda para hacer algo parecido de lo que muestras, solo que ahora abriendo un archivo pdf.

Jorge L. Dunkelman 04 noviembre, 2012 16:54  

No tengo, pero podrías abrir los pdf creando un hipervínculo al archivo.

Luis G F 04 noviembre, 2012 18:39  

Ya lo intente con desref pero no me funciona,lo hace dinámico pero no conserva el hipervinculo por alguna razón se pierde; como sea gracias y slds

Jorge L. Dunkelman 06 noviembre, 2012 07:46  

Para crear un hipervínculo con fórmulas tienes que usar la función HIPERVINCULO.
También se podría programar en el código.

Anónimo,  02 enero, 2013 16:13  

excelentes aportes...este blog me ha sido de gran utilidad.

Tengo una consulta, este macro me corre muy bien en mi PC pero quisiera saber si es posible usarla en mi tablet o que tablet debo tener para correr macros como este.

Buen dia

Jorge L. Dunkelman 02 enero, 2013 18:14  

Todo tablet que pueda correr MS Excel con macros. Si bien hay varias aplicaciones para Android que pueden abrir y editar documentos de Office (Word, Excel) no creo que puedan correr macros.

Anónimo,  30 abril, 2013 09:22  

Excelente me salio todo muy bien solo no entendi bien lo ultimo de workbook before close de donde ponerlo y las instrucciones de vb pero de ahi en mas ya hice mi catalogo, puse mas buscarV donde me despliega los precios, caracteristicas, descuento y lo que se me ocurra Gracias Saludos desde Aguascalientes México

Jorge Dunkelman 03 mayo, 2013 16:43  

Como pongo en la nota, se trata de un evento. Los eventos van en el módulo de la hoja donde deben actuar (en nuestro ejemplo, Catalogo). En el blog hay una serie de notas sobre eventos. Te sugiero que veas esta.

Anónimo,  25 mayo, 2013 01:36  

Hola que tal Jorge:
Implemente tu publicacion con sus respectivos ajustes y al parecer quedo perfecto y se me ocurrio que en vez de poner una lista de validacion ponerle un cuadro combinado (combox) al listado para actualizar las imagenes y que crees??? que no funciona con este ultimo... esto creo yo por que en el codigo de la hoja que arranca automaticamente no reconoce el cambio que hace el Combox... sabras por que sucede esto???
diras pues ¿por que en ves de la lista que de Combox? y esto es por que en el combox puedo puedo escribir directamente autocompletadose cuando escribo.. cosa que con el listado no...
de antemano agradesco mucho tu paciencia y atención...
Atte: Timon de Atenas
Saludos desde Mexico D.F.

Jorge Dunkelman 25 mayo, 2013 17:29  

Hola, como mencionas autocompletar (puedes ver esta nota en el blog), se que estás usando la combobox de la colección de controles ActiveX. Estos controles tiene sus propios eventos, no los de la hoja.
Después de incrustar el control en la hoja, en el módulo de la hoja en la casilla de la izquierda (donde aparece "General") abres la lista desplegable y verás que aparece el bojeto "Combobox1" (o el nombre que le hayas dado en la lista de propiedades). Al elegir este objeto, en la casilla de los eventos (la de la derecha) aparecerán todos los eventos ligados a la combobox. Por lo general usamos el evento Change, pero hay varios más.

Realidades Venezolanas 25 enero, 2014 13:36  

Felicitaciones por tu presentacion,a mi me funciona perfecfectamenete,solo queria preguntarte si es posible que al colocar el codigo en la lista desplegable aparescan en ves de una imagen,7 imagenes,lo que pasa es que quiero utilizarlo en un apresentacion de genealogia y quiero que a lo que aparesca la imagen del hijo me aparesca la de los padres y la de los abuelos maternos y paternos,tu diras si se puede con este metodo que explicastes,desde ya muchisimas gracias por tus aportes que siempre son de gran interes,desde Venezuela,Carlos Maldonado

Jorge Dunkelman 26 enero, 2014 06:45  

Hola Carlos, habría que elaborar un modelo distinto. Este sólo te servirá para traer una imagen,

Realidades Venezolanas 26 enero, 2014 23:50  

Garcias por tu pronta respuesta,con el método anterior si puedo mostrar en la hoja de excel las 7 fotos,intente en vano con este método pero no lo logre,ya organice la hoja para utilizar los 2 métodos y funciona bien,es decir,que cuando quiera ver las 7 fotos aplico el 1er método y para verlas una a una aplico el 2do método,de todas manera estaré atento por si decides incorporarle mas fotos al 2do método que me parece mas funcional por lo de la memoria utilizada por excel,gracias nuevamente por tus aportes que siempre son de gran ayuda al momento de realizar nuestros propios proyectos laborales

Douglas 03 abril, 2014 07:42  

Hola Jorge, cree un catalogo de imágenes con un código distinto al tuyo

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("D19")) Is Nothing Then
If Target.Value = Range("D19").Value Then
Image1.Picture = _
LoadPicture("FT Marzo\" & Range("C19").Value & " " & Target & ".jpg")
End If
End If

If Not Intersect(Target, Range("L19")) Is Nothing Then
If Target.Value = Range("L19").Value Then
Image2.Picture = _
LoadPicture("FT Marzo\" & Range("K19").Value & " " & Target & ".jpg")
End If
End If

End Sub

Pero tengo un problema, el tamaño del archivo crece desproporcionadamente. Es como si por cada hoja que creo en el libro se cargan las imágenes de la carpeta que la contiene una y otra vez. Como necesito que las imágenes se queden en el archivo no puedo utilizar el código que indicas para limpiar el control de imagen. ¿Hay alguna forma de resolver esto?. El tamaño de las imágenes que estoy usando es 400 kb.

Jorge Dunkelman 03 abril, 2014 20:42  

Douglas, no se decirte, pero me llama la atención esta sentencia

LoadPicture("FT Marzo\" & Range("C19").Value & " " & Target & ".jpg")

¿por qué hay un espacio entre Range("C19").Value y Target ?

jose luis Figueroa 09 mayo, 2014 16:49  

Antes que todo agradecer por tu buena voluntad de compartir y enseñar tus conocimientos.....todo funciona logre que al llamar el codigo aparece la imagen pero solamente 1 y necesito que aparezca una imagen por codigo lo cual no logro hacer....te comento que ajuste el ancho y alto de cada columna, para que la foto quede al lado del codigo, por ejemplo busco el codigo en A3, y aparece la foto del producto en C3.
Mi problema es cuando busco el codigo en A4, la imagen debiera aparecer en C4, pero no aparece, como puedo solucionar esto??? estare muy agradecido de tu respuesta.... tengo el archivo de prueba si pudiera enviarlo a tu correo seria genial para que puedas apreciar a fondo mi inquietud......

Jorge Dunkelman 16 mayo, 2014 14:40  

Enviame el archivo (ver lo que pongo en el enlace Ayuda, en la parte superior de la plantilla).

Anónimo,  12 septiembre, 2014 23:11  

Perfecto, me funcionó muy bien. Muchas gracias por su aporte.

Anónimo,  24 octubre, 2014 01:46  

Se Puede hacer esto con PDF en lugar de jpg

Jorge Dunkelman 26 octubre, 2014 22:36  

No, además sería más sencillo usar un hipervínculo para abrir el archivo PDF.

jockey 26 enero, 2015 19:55  

como puedo cambiar una referencia en un rango de formulas, para no hacerlo manual ya que son demasiadas

Jorge Dunkelman 26 enero, 2015 20:50  

Tendrías que definir un poco más el problema (y hacerlo por mail privado, como pongo en el enlace Ayuda para consultas no relacionadas con el tema de la nota).
Una posibilidad es usar Buscar y Reemplazar (Ctrl-L).

Unknown 15 marzo, 2016 21:27  

Hola

Antes agradezco tu ayuda ya que he podido resolver algunos problemas.

Ahora pido tu ayuda, tengo una base que esta dividida en categorías y por ejemplo cada categoría tiene unos 20 productos al momento que deseo filtrar una categoría y las imágenes que hay se mueven todas que puedo hacer para que cuando filtre una categoría no pase esto.

Espero haberme explicado

Saludos

Jorge Dunkelman 16 marzo, 2016 06:45  

Tienes que seleccionar las imágenes y en el menú de formato de la imagen, en la categoría Propiedades marcar la primera opción (mover y cambiar tamaño con la celda).

Daniela Vargas 16 marzo, 2016 17:22  

Muchas gracias por tu ayuda, saludos

ENDIKA NAVARRO ARTEAGA 26 abril, 2016 15:05  

Buenas tardes. He conseguido hacerlo gracias a tu explicación...SENCILLAMENTE GENIAL!!! Pero mi necesidad es poder hacer lo mismo pero en varias celdas y con varias imágenes dentro de la misma hoja, con diferentes selecciones de control. He intentado insertar códigos iguales, cambiando las referencias de celdas y rangos, pero no funciona...seguro que me estoy dejando algo!!! HELP PLEASE!!!

Jorge Dunkelman 27 abril, 2016 07:51  

Hola, tendría que ver el código para hacerme una idea de donde está el problema. Tambien puedes fijarte en el post del primer enlace, donde muestro un modelo sin macros.

ENDIKA NAVARRO ARTEAGA 28 abril, 2016 16:42  

Lo he probado con la opción sin macros y ....FUNCIONA PERFECTAMENTE!!!...creando un nombre distinto de Imagen1, Imagen2...etc para cada una de las fotos, asociandolo a la celda de referencia correspondiente...MUCHAS GRACIAS POR TODO!!!!

Publicar un comentario

Google+ Followers

Seguidores

Google+ Badge

Términos Legales

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP