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](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhymf-YdXAtdusTZM8sA2Na_7KZZu6pCRZjIFE6w5mrD5y11qUoKNClWmk1lNj9Vn9uRcmJD2FpfIUjWPE-QwkrMM26dGOkr2l9rzvlehVv6CBW7zCD9VbpQ3QliGCQMAxC6AgqiA/s400/catmac01.jpg)
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](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVI5pjJLSOq4GH3H9xn67BjYJeYnriUmT3scHhccUFwwe_yV5dYE36MT3TP1L1vKPVI5hZO_rTgOkApWCJ0kcnOMqsFJyLNDI9PnymuK-9oqaOcOTEWhH6-BntQg7_9MgCYxoKEg/s400/catmac02.jpg)
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](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgslImyqRUsIVvxCJ9Mp7UF457E023wltVVYsRkLZ92KZ1WVPN3Q6xc7tt7Fsrx579670weTCxnMjtPeZXvgLkMFr-lIqtGu42dwzDeCi84d_N85xgdY6Bim8yu5llIuWOlTC_MZQ/s400/catmac03.jpg)
Los valores de la lista desplegable están definidos por el rango dinámico “imagenes”
![Catálogo de Imágenes en Excel](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5H9CWxen3TuC2bph5ZAddIY4RaR9pjqzXOIvyMLXg6BhajNDMhB2MZLqNyuXTVjuzCBkqikd7hr-_fplGXCMcozcw_IcxQb4UJ7XTvvlYnBzBiAloZLzTOFShuy89K6GIAqpYMg/s400/catmac04.jpg)
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](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijXjMogFdOFn8XI7ODKyLuwQt2TFLJOniM6_w03TZtzePzQuaQmr1XiuLtZRGhPRhbqjcuZENBa_2vZCxdBAuNWcnO5PotCxIOQVXKIgEcke5ZQYZzpk6aazoQhfnzTX5s6uL_wg/s400/catmac05.jpg)
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](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPuNLCT_SiLPm9TqfQIwpLW63TORDKRBTiht2L1rRHYdom5LMu9Xt6ZE5VBUjXOyT2mEbGMO1u0mCYS-1bSRRo5Znh10ZoYtqYkoTpRdLMuPEFFgWcs7j_IF5aoaLMvsmNxMgc9w/s400/catmac06.jpg)
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](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTPINlw-Eq3UONnYzeCn3koykr_W93Z1hO1-bH1Ad5GB9SsJ2lEVwYxAT-O4kSWp-M3CWbYi39k8j0QLeDoZdu3b60jS3Azyegl1tE_7gwO7DvicBcfDFDqC9rr4ARQbCYFaEgtw/s400/catmac07.jpg)
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](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxqULtpxjkHpwL7KMyu4ULV5kVEVPRIMPIaYpsNTNbQU-sp2Ks_mNeM4_Io6G_B17QJXtrukv3snJStmJKUTds3MNRa1HJOieU5uwT3BCdbto8aj3-maPAyaFefu7cpjlgz2GUA/s400/catmac08.jpg)
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: MS Excel
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
ResponderBorrarHola 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
ResponderBorrarMuchas gracias por esta nota, es muy buena y esta muy mejorada porque la verdad si estaba algo tardado con la otra tecnica,gracias...
ResponderBorrarpath_imagenes es un rango dinámico definido como nombre. Lo defines con Insertar--Nombres--Definir.
ResponderBorrarLa 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.
Hola...
ResponderBorrarMucho 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
Hola de nuevo.
ResponderBorrarBueno, 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
Efectivamnete, al copiar la nota al blog deje de lado todo un párrafo donde explico el uso del nombre "path_imagenes".
ResponderBorrarMil disculpas a los lectores y en breve estaré corrigiendo la nota.
Respecto al error 481 creo que la única solución es cambiar la propiedad de la imagen, como señala Microsoft:
ResponderBorrarEste 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.
Sr.Jorge Dunkelman,
ResponderBorrarHace 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
Hola soy anonimo gracias yo tambien ya consegui hacer el catalogo, gracias tambien Ivan, Chau
ResponderBorrarEl "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.
ResponderBorrarHola: 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!!!
ResponderBorrarSaludos Roberto!
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.
ResponderBorrarJorge, han sido muy interesantes todas las propuestas que ha presentado.
ResponderBorrarQuisiera 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.
Ricardo,
ResponderBorrarponte en contacto conmigo por mail
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.
ResponderBorrarMichel
ResponderBorrarno 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.
ya me aparece la imagen, pero a la hora de cambiar el valor no me actualiza la imagen, se queda en la misma.
ResponderBorrarno 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
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.
ResponderBorrarHOLA 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
ResponderBorrarPicAddress = Sheets("Catalogo").Range("C3").Value
QUE PUEDO HACER
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.
ResponderBorrarN
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?
ResponderBorrarpdta: soy un principiante en Visual Basic...pero me gusta estudiarlo bastante....
disculpas por no identificarme, pero el blog presenta dificultades..
En principio tienes que crear un código para cada cuadro.
ResponderBorrarEn cuanto a identificarte es suficiente que pongas el nombre en el cuerpo del comentario, como hizo Michel por ejemplo.
Hola Jorge L. a mi si que me funciona, pero no se me ven las imagenes completas.
ResponderBorrarEj. tengo una imagen 1060 x 886.
Gracias por tu apoyo.
Un saludo.
Hola soy Hangloose.
ResponderBorrarsoy 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!
Hola Hangloose,
ResponderBorrarpara 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" :)
Muchas gracias.Ya me funciona.Ya le echaré un ojo a las guías para principiantes;)
ResponderBorrarUn saludo,
Hangloose
Estimado Jorge
ResponderBorrarLuego 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ú
Hola Carlos,
ResponderBorrarcambiando 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.
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?
ResponderBorrarEspero haberme explicado bien.
gracias
Hola Jorge.
ResponderBorrarsi 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
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.
ResponderBorrarPerfecto...problema solucionado!
ResponderBorrargracias
Hangloose
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
ResponderBorrarGracias mil
Carlos Gonzalez
Carlos,
ResponderBorraraumentando el tamaño del control.
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 !!!!!
ResponderBorrarTe sugiero que sigamos el tema por línea privada. Puedes enviarme el archivo por mail.
ResponderBorrarOk 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.
ResponderBorrarRealmente 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...
ResponderBorrarContinúa así por favor!
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
ResponderBorrarJuan
Me sale un error 424 y no jala la foto.
ResponderBorrarEl link de la foto esta bien.
¿Has creado los nombres (imagenes y path_imagenes)?
ResponderBorrarMuchas Gracias por responder.
ResponderBorrarno 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
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".
ResponderBorrarTe sugiero que leas mi nota sobre el uso de nombres.
Patricia,
ResponderBorrartienes que mandar tus consutas por mail privado. Por favor, fijate en lo que pongo en el enlace de pa pestaña "Ayuda".
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
ResponderBorrarEl código para hacerlo no es trivial y excede las posibilidades de un comentario.
ResponderBorrarEn 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.
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!
ResponderBorrarNo 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.
ResponderBorrardeberian de colocar el ejemplo para visualizarlo bien ya q no e podido realizar el ejercico
ResponderBorrargracias de antemano
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" :)
ResponderBorrarEstan 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,
ResponderBorrarHola 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
ResponderBorrar¿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.
ResponderBorrarHola 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
ResponderBorrarGracias Jorge Dunkelman. Mi nombre es Guillermo Moreno de la Ciudad de México.
ResponderBorrarNecesito 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.
Guillermo,
ResponderBorrartal como muestro en esta nota o en la anterior (sin macros) mencionada.
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
ResponderBorrarmuy 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
ResponderBorrarUsando hipervínculos
ResponderBorrarmuchas garcias
ResponderBorrarme sale error 53, coloco la raiz correcta y la imagen en la ubicacion correspondiente, sabes cual es el fallo?
ResponderBorrargracias!
El error 53 se produce cuando se hace referencia a un archivo que no existe.
ResponderBorrarHola 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...
ResponderBorrarHe 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
Hola Cristina,
ResponderBorrargracias por los conceptos. Te sugiero que sigamos la consulta por mail privado. Sería buena si me enviaras un ejemplo del cuaderno.
Amigo necesito tu ayuda urgente, porque esto me esta dando un dolor de cabeza.
ResponderBorrarestoy 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"
Juan, el código muestra el objeto PivotTables("Tabla dinamica1") pero en el error mostrás pivottables("tabla dinamica3"). ???
ResponderBorrarAdemá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.
Muy bueno; tendrás algún tema de ayuda para hacer algo parecido de lo que muestras, solo que ahora abriendo un archivo pdf.
ResponderBorrarNo tengo, pero podrías abrir los pdf creando un hipervínculo al archivo.
ResponderBorrarYa 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
ResponderBorrarPara crear un hipervínculo con fórmulas tienes que usar la función HIPERVINCULO.
ResponderBorrarTambién se podría programar en el código.
excelentes aportes...este blog me ha sido de gran utilidad.
ResponderBorrarTengo 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
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.
ResponderBorrarExcelente 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
ResponderBorrarComo 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.
ResponderBorrarHola que tal Jorge:
ResponderBorrarImplemente 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.
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.
ResponderBorrarDespué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.
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
ResponderBorrarHola Carlos, habría que elaborar un modelo distinto. Este sólo te servirá para traer una imagen,
ResponderBorrarGarcias 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
ResponderBorrarHola Jorge, cree un catalogo de imágenes con un código distinto al tuyo
ResponderBorrarPrivate 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.
Douglas, no se decirte, pero me llama la atención esta sentencia
ResponderBorrarLoadPicture("FT Marzo\" & Range("C19").Value & " " & Target & ".jpg")
¿por qué hay un espacio entre Range("C19").Value y Target ?
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.
ResponderBorrarMi 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......
Enviame el archivo (ver lo que pongo en el enlace Ayuda, en la parte superior de la plantilla).
ResponderBorrarPerfecto, me funcionó muy bien. Muchas gracias por su aporte.
ResponderBorrarSe Puede hacer esto con PDF en lugar de jpg
ResponderBorrarNo, además sería más sencillo usar un hipervínculo para abrir el archivo PDF.
ResponderBorrarcomo puedo cambiar una referencia en un rango de formulas, para no hacerlo manual ya que son demasiadas
ResponderBorrarTendrí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).
ResponderBorrarUna posibilidad es usar Buscar y Reemplazar (Ctrl-L).
Hola
ResponderBorrarAntes 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
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).
ResponderBorrarMuchas gracias por tu ayuda, saludos
ResponderBorrarBuenas 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!!!
ResponderBorrarHola, 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.
ResponderBorrarLo 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!!!!
ResponderBorrar