sábado, mayo 02, 2009

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

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 comentarios:

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

    ResponderBorrar
  2. 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

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

    ResponderBorrar
  4. 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.

    ResponderBorrar
  5. 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

    ResponderBorrar
  6. 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

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

    ResponderBorrar
  8. 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.

    ResponderBorrar
  9. 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

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

    ResponderBorrar
  11. 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.

    ResponderBorrar
  12. 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!

    ResponderBorrar
  13. 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.

    ResponderBorrar
  14. 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.

    ResponderBorrar
  15. Ricardo,

    ponte en contacto conmigo por mail

    ResponderBorrar
  16. 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.

    ResponderBorrar
  17. 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.

    ResponderBorrar
  18. 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

    ResponderBorrar
  19. 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.

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

    ResponderBorrar
  21. 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

    ResponderBorrar
  22. 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..

    ResponderBorrar
  23. 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.

    ResponderBorrar
  24. 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.

    ResponderBorrar
  25. 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!

    ResponderBorrar
  26. 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" :)

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

    Un saludo,

    Hangloose

    ResponderBorrar
  28. 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ú

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

    ResponderBorrar
  30. 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

    ResponderBorrar
  31. 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

    ResponderBorrar
  32. 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.

    ResponderBorrar
  33. Perfecto...problema solucionado!
    gracias

    Hangloose

    ResponderBorrar
  34. 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

    ResponderBorrar
  35. Carlos,
    aumentando el tamaño del control.

    ResponderBorrar
  36. 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 !!!!!

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

    ResponderBorrar
  38. 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.

    ResponderBorrar
  39. 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!

    ResponderBorrar
  40. 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

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

    ResponderBorrar
  42. ¿Has creado los nombres (imagenes y path_imagenes)?

    ResponderBorrar
  43. 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

    ResponderBorrar
  44. 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.

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

    ResponderBorrar
  46. 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

    ResponderBorrar
  47. 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.

    ResponderBorrar
  48. 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!

    ResponderBorrar
  49. 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.

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

    gracias de antemano

    ResponderBorrar
  51. 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" :)

    ResponderBorrar
  52. 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,

    ResponderBorrar
  53. 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

    ResponderBorrar
  54. ¿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.

    ResponderBorrar
  55. 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

    ResponderBorrar
  56. 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.

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

    ResponderBorrar
  58. 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

    ResponderBorrar
  59. 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

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

    gracias!

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

    ResponderBorrar
  62. 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

    ResponderBorrar
  63. 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.

    ResponderBorrar
  64. 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"

    ResponderBorrar
  65. 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.

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

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

    ResponderBorrar
  68. 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

    ResponderBorrar
  69. 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.

    ResponderBorrar
  70. 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

    ResponderBorrar
  71. 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.

    ResponderBorrar
  72. 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

    ResponderBorrar
  73. 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.

    ResponderBorrar
  74. 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.

    ResponderBorrar
  75. 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.

    ResponderBorrar
  76. 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

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

    ResponderBorrar
  78. 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

    ResponderBorrar
  79. 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.

    ResponderBorrar
  80. 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 ?

    ResponderBorrar
  81. 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......

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

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

    ResponderBorrar
  84. Se Puede hacer esto con PDF en lugar de jpg

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

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

    ResponderBorrar
  87. 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).

    ResponderBorrar
  88. 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

    ResponderBorrar
  89. 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).

    ResponderBorrar
  90. Muchas gracias por tu ayuda, saludos

    ResponderBorrar
  91. 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!!!

    ResponderBorrar
  92. 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.

    ResponderBorrar
  93. 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!!!!

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.