jueves, 21 de febrero de 2013

VBA: Cargar un gráfico en un Formulario de Excel.

Días atrás un lector preguntaba por la manera de 'cargar' un gráfico dentro de un UserForm (formulario de usuario) empleando para ello macros.
De partida el asunto es sencillo, salvo por los eventos a emplear necesarios para que la carga del gráfico se actualice correctamente. Partiremos de la siguiente tabla de datos y de un gráfico de columnas ya construido:

VBA: Cargar un gráfico en un Formulario de Excel.



La idea por tanto es crear un UserForm (formulario de usuario) e insertar en él nuestro gráfico de columnas (llamado en este caso '1 Gráfico'). Por tanto nuestro primer paso será Insertar un UserForm desde el Editor de VB (Alt+F11 para abrirlo), menú Insertar y la opción de UserForm.
Una vez creado el UserForm, pasaremos desde el Cuadro de herramientas a insertar un control Imagen (Image), que desplegaremos en nuestro formulario:

VBA: Cargar un gráfico en un Formulario de Excel.


Si no lo tuvieramos a la vista, lo buscaremos entre los controles adicionales, pulsando el botón derecho del ratón y mostrando dichos controles:

VBA: Cargar un gráfico en un Formulario de Excel.



Una vez insertado el control Imagen (llamado Image1), procedemos a incorporar el código que cargue nuestro gráfico en él.
El asunto es sencillo, asociaremos nuestra macro al evento que inicializa el formulario (UserForm), podemos hacer click sobre el UserForm (UserForm_Initialize)y escribir:

Private Sub UserForm_Initialize()
'indicamos qué gráfico vamos a insertar como imagen en el Formulario
Set graficoactivo = Sheets(1).ChartObjects(1).Chart
'damos nombre al archivo GIF donde exportaremos el gráfico
NombreGIF = ThisWorkbook.Path & "\temporal.gif"

'redimensionamos el Alto y Ancho del objeto Imagen
'(del recuadro donde insertamos el gráfico)
alto = Sheets(1).Shapes("1 Gráfico").Height
ancho = Sheets(1).Shapes("1 Gráfico").Width
UserForm1.Image1.Height = alto
UserForm1.Image1.Width = ancho
base = UserForm1.Width
altura = UserForm1.Height

UserForm1.Image1.Top = (altura - alto) / 2
UserForm1.Image1.Left = (base - ancho) / 2

'Exportamos el gráfico al archivo GIF generado
graficoactivo.Export Filename:=NombreGIF, FilterName:="GIF"
    
'Colocamos la imagen Gif en el espacio destinado del Formulario
UserForm1.Image1.Picture = LoadPicture(NombreGIF)
End Sub



Por otra parte he creado un botón en la hoja de cálculo, al que he asociado la siguiente macro que carga el formulario, macro que hemos incluido en un módulo del explorador de proyectos dentro del Editor de VB:

Sub graficoformulario()
'Cargamos en memoria el Formulario
Load UserForm1
'refrescamos el formulario
UserForm1.Repaint
'y lo mostramos
UserForm1.Show
End Sub



Listo, ya podemos hacer uso de nuestro botón en la hoja de cálculo para cargar el gráfico, con los últimos cambios, en nuestro formulario.
Requiere especial mención el uso del método Repaint en la macro 'graficoformulario', ya que este método actualiza la pantalla volviendo a dibujar el formulario, especialmente útil si el contenido o la apariencia de un objeto cambia de forma significativa y no queremos esperar hasta que el sistema vuelva a dibujar el área automáticamente.


Vemos el resultado:

VBA: Cargar un gráfico en un Formulario de Excel.



Ojo por que con este proceso lo que hemos conseguido es generar una imagen Gif (guardado en la misma ruta donde esté nuestro Libro de Excel), para luego recuparar dicha imagen Gif e insertala en el userForm... es decir, realmente no es un gráfico estrictamente hablando lo que hemos insertado, sino una 'foto' de él.

64 comentarios:

  1. Hola Ismael, tengo un problema al hacer click derecho en el cuadro de herramientas y luego en controles adicionales, excel no me hace nada, no me sale el cuadro que muestras de controles adicionales. Cual puede ser el problema y como lo soluciono.
    Cuando estoy haciendo un formulario en la hoja misma, si me permite adicionar un control, más no cuando estoy en el editor de visual basic, Alguna solución...

    ResponderEliminar
    Respuestas
    1. Hola Alfredo,
      prueba a acceder desde el menú Herramientas > Controles adicionales dentro del Editor de VBA...
      Es bastante raro que apareciendote la opción activa no te surja la ventana con los controles.
      Comentas...
      Slds cordiales

      Eliminar
    2. Yo también, tengo el mismo problema, accedo al menú herramientas, clickeo en controles adicionales, y no me aparece nada aun!!, que puedo hacer???

      Eliminar
    3. Hola Ariel,
      asegúrate que haces clic derecho sobre la ventana de 'Cuadro de herramientas'.
      Saludos

      Eliminar
  2. el grafico tiene que estar en la misma hoja de datos o puede estar en una hoja grafico aparte?
    saludos

    ResponderEliminar
    Respuestas
    1. Hola, que tal?!
      el gráfico puede estar en cualquier sitio, date cuenta que la macro recoge la imagen exportada a un a ruta concreta, donde previamente se ha exportado.
      Por tanto no importa donde esté el gráfico, lo importante es importar la imagen generada de esa dirección (ruta) donde fue exportada.

      Slds

      Eliminar
  3. Hola amigo!

    Se que debe sencillo pero deseo mostrar una imagen en un formulario con el control IMAGE, la condicion seria que al abrir mi excel desde otra pc al llamar al formulario desde cualquier hoja activa siempre se muestre esa imagen.

    A la espera de tu ayuda, gracias

    ResponderEliminar
    Respuestas
    1. Hola Jesús,
      fijate que este control .Image requiere de una ruta, asi que la única solución que veo ahora mismo sería que la ruta fuera accesible desde cualquier lugar... quizá en un dropbox, o un picasa, sharepoint, etc...
      No lo he probado pero tiene sentido que funcione.
      Siento no poder decirte mucho más.
      Slds

      Eliminar
    2. Gracias de todas formas amigo, si lo resuelvo te pasare el dato

      Eliminar
    3. Te lo agradecería
      ;-)
      Un cordial saludo

      Eliminar
  4. Hola Ismael! Mil gracias por el tutorial, es muy claro.
    Sin embargo, en este momento necesito insertar un cuadro de excel en un formulario vba y si lo inserto como listbox el formato no es muy amigable. Hay manera de también "sacarle una foto" al cuadro en excel y cargarlo en un formulario (se deberia actualizar cada vez que carga el formulario)

    Gracias anticipadas!

    ResponderEliminar
    Respuestas
    1. Hola Carolina!
      el problema es que el sistema explicado (.export) sólo sirve para gráficos :-(

      Una solución sería la que propones (un ListBox), o quizá si no son muchas celdas, emplear diferentes TextBox replicando un rango de celdas, y rellenarlas con la propiedad .Text

      Userform1.TextBox1.Text = "el valor de la celda"

      Investigaré, de todas formas, por si encuentro algo más práctico.
      Un saludo y muchas gracias!!!

      Eliminar
  5. Hola gracias por el tutorial, sabes lo he intentado pero en la pantalla me sale el siguiente aviso: se ha producido el error "70" en tiempo de ejecución permiso denegado.

    Busque mas información acerca de eso y probablemente no tenga permiso para trabajar con alguna herramienta, por favor ayuda o si me pudieses enviar el libro excel donde lo haz hecho te lo agradecería.

    ResponderEliminar
    Respuestas
    1. Hola José,
      el código explicado no necesita de ninguna Referencia descargada, por lo que en principio no debería devolver ningún tipo de error.
      Verifica todos los pasos, y si sigue igual, puedes enviármelo a
      excelforo@gmail.com
      y le echaré un vistazo.
      Slds

      Eliminar
    2. Excelforo Ismael Romero:
      Estoy haciendo una cadena de formularios para capturar datos de pesquerias. DE hecho ya estaba por terminarlo, deje al final el ingresar un código en un textbox para validar el formato de fecha, me indica el mismo tipo de error (70: permiso denegado). Al principio de la rutina tenia la orden :

      On Error Resume Next

      pensando que eso le "estorbaba" se lo comente, y nada el error continua, pero ahora no me deja correr ninguno del resto de los formularios, es como si me hubiera cambiado los atributos... que puede estar pasando??? Podrias darme una sugerencia porfis!! Que son las Referencias descargadas??
      Gracias

      Eliminar
    3. Hola Esther,
      normalmente (no siempre) el error 70 se produce cuando se emplea una variable (con el mismo nombre) en diferentes lugares de nuestros procedimientos...
      revisa esta posibilidad, y tómate como norma ir limpiando las variables objeto una vez las hayas empleados (Set vble=Nothing); por supuesto no emplees mismo nombres para llamar a Sub's y Function's.

      En tu caso, si tienes varios Userform busca primero en los eventos Initialize ve paso a paso siguiendo el código hasta Depurar la línea que causa el error (presionando F8)..

      como te digo estas son algunas de las causas.. pero no las únicas.
      Intenta depurar y ver en qué linea se genera el error.

      Las Referencias son librerias con contenido de programación, paquetes de código que se pueden descargar e instalar...
      Un saludo

      Eliminar
  6. Hola, amigo me podrias decir que tendria que hacer para insertar mas de 1 grafico??

    ResponderEliminar
    Respuestas
    1. Hola,
      debo suponer que quieres insertar diferentes gráficos en diferentes Controles de imágenes, ya que de lo contrario no los verias todos a la vez...
      Si es así, al tener varios Controles de imagene, cada uno con su nombre, deberás cargar cada Imagen de un gráfico exportada a uno de dichos controles

      UserForm1.Image1.Picture = LoadPicture(NombreGIF1)
      UserForm1.Image2.Picture = LoadPicture(NombreGIF2)
      ...

      Slds

      Eliminar
  7. Hola que tal Ismael Romero, que grandes aportaciones haces de verdad te felicito, gente com tu merecen nuestra admiracion y respeto, me ha servido de mucho esto, pero sabes quisiera introducir otra grafica, pero no se como, ya le intente de mi manera pero no se, no entendi donde se tiene que poner en la ultima respuesta que diste.

    Bueno te explico lo que hice, ya genere otra grafica en mi hoja de calculo en Excel, Ya genere un segundo control en mi Userform1, pero de ahi que sigue?.... ¿Copio y pego el codigo para la primer grafica? y que tendria que cambiar aparte de NombreGIF2.

    Muchisimas gracias de ante mano por tu atencion, Saludos1

    ResponderEliminar
    Respuestas
    1. Hola Luis,
      muchas gracias por tus palabras.
      Si como indicas tienes dos imagenes (una para cada gráfico), deberías tener un código similar a este:
      Private Sub UserForm_Initialize()
      Set grafico1 = Sheets(1).ChartObjects(1).Chart
      Set grafico2 = Sheets(1).ChartObjects(2).Chart

      NombreGIF1 = ThisWorkbook.Path & "\temporal1.gif"
      NombreGIF2 = ThisWorkbook.Path & "\temporal2.gif"

      'aquí iría el código para redimensionar los objetos Image dentro del Userform

      grafico1.Export Filename:=NombreGIF1, FilterName:="GIF"
      grafico2.Export Filename:=NombreGIF2, FilterName:="GIF"

      UserForm1.Image1.Picture = LoadPicture(NombreGIF1)
      UserForm1.Image2.Picture = LoadPicture(NombreGIF2)
      End Sub

      Espero lo veas más claro ahora
      ;-)

      slds

      Eliminar
    2. Hola que tal, me salio muy bien todo, de verdad muchas gracias amigo. Eres muy bueno. Sabes te cuento un poco de lo que hago, estoy haciendo un codigo para calcular Calibre de conductores y Protecciones electricas. Estoy por titularme y hago un pequeño programa en VBA de Excel, para realizar parte de esto, el usuario introduce los datos a traves de un formulario y los deposita en Excel, despues aplico fórmulas y despues como una ayuda adicional el usuario va visualizando sus datos en graficas, en fin...
      Solo queria contarte para que me sirvio, Gracias por todo. Que dios te de des mas por lo que tu haces. Saludos desde Morelos, México.

      Eliminar
    3. Muchisimas gracias por la explicación Luís,
      me alegro te sirviera
      ;-)
      Un cordial saludo!!!

      Eliminar
  8. Hola Ismael, soy Luis otra vez te vuelvo a molestar, me surgió otra pequeña duda, como podria hacer para que se actualize automaticamente mi gráfica desde el formulario, al insertar datos a la Gráfca desde el mismo formulario.

    Te mandé el archivo en Excel a tu correo de Gmail para que lo revises.
    Muchas gracias!

    ResponderEliminar
    Respuestas
    1. Hola Luís, te adjunto la propuesta por email.
      La idea sería que al presionar el botón de actualizar (o incluso tras añadir un nuevo valor) desde el Userform, esconda y descargue el UserForm, y luego vuelva a cargarlo con la macro 'graficoformaulario', que hay al final del post.
      Slds

      Eliminar
    2. Estoy muy agradecido por tu apoyo. Sin conocerme, sin saber quien soy me has ayudado mucho, a salir de mis dudas y a avanzar con mi trabajo. Sabes te he mandado un email en el cual te propongo un problema, se que puede ser algo o muy sencillo o muy dificil, no lo se, se que propablemente tu has hecho algo similar a esto o tienes una idea de que hacer para poder guiarme.
      Gracias por tu ayuda, eres una gran persona, mis bendiciones para ti hermano. Estaré al pendiente de tu respuesta, Saludos!!

      Eliminar
    3. Gracias a ti,
      revisaré el fichero enviado.
      Slds cordiales

      Eliminar
  9. Buenas:
    Como se puede sacar una imagen que esta en otra hoja y mostrarla en el control image en un userform relacionandola con un combobox
    Ejemplo

    En la hoja1 tengo una imagen llamada "hola" y en el combobox al hacer click me muestre la imagen "hola" en el control image que esta inserto en el userform

    Gracias de antemano

    ResponderEliminar
    Respuestas
    1. Hola,
      es bastante complejo lo que preguntas.
      Por un lado tendrás que seguir las indicaciones de este mismo post... pero asociando las diferentes imagenes a mostrar según el valor devuelto de un ComboBox... teniendo la variable devuelta por el ComboBox como carga del control Image.

      Ya te digo que es bastante largo de explicar y realizar para desarrollarlo en un comentario.

      Slds

      Eliminar
  10. ? Como puedo que al dar Click en un CommandButton me cree uno Nuevo con un Nombre asignado

    ResponderEliminar
    Respuestas
    1. Hola que tal estás?, espero te encuentres bien.
      Puedes añadir a tu CommandButton un código similar a este:
      ActiveSheet.Buttons.Add(200, 15, 125, 35).Characters.Text = "prueba"

      te añadirá un botón de comando con el texto "prueba".

      Slds cordiales

      Eliminar
  11. Ismael, buenas noches soy de PERU, mi nombres es Luis Miguel Santos .... Como puedo realizar o tener diferentes graficas y que por cada una usando USERFORM pueda ver cada grafico independientementee...

    Gracias + Abrazo mi correo es: luis_santos368@hotmail.com

    ResponderEliminar
    Respuestas
    1. Hola Luis Miguel,
      el asunto es algo más complejo y dificil exponer en un comentario.
      Primero tendrías que crear los diferentes UserForm.
      A continuación, mediante Array crear las variables para cada gráfico, y asignarle un nombre diferente.
      Por último, cargar los diferentes nombres de las imágenes creadas en cada uno de los UserForm.
      Slds

      Eliminar
  12. Al parecer te voy entendiendo. A ver si me explico un poco mejor....
    Ejemplo:
    Si presiono un BOTON A: muestre un grafico: GRAFICO 01
    Si presiono un BOTON B: muestre un grafico: GRAFICO 02
    Si presiono un BOTON C: muestre un grafico: GRAFICO 03.

    COn la condicion de que cada grafico, sea un grafico diferente y sean tres BOTONES....

    Espero alguna pista.

    ResponderEliminar
    Respuestas
    1. Hola,
      lee el comentario más arriba del 26 Jun 2013, allí encontrarás el código que buscas... y podrás adapatarlo si lo consideras.
      Slds

      Eliminar
  13. Hola buenas tardes Ismael, quiero felicitarte por esta página la cual me ha sacado de varios apuros, y escribo este comentario esperando tu apoyo (y saliendome un poco del tema expuesto):

    Lo que sucede es lo siguiente:

    Tengo 3 macros realizadas las cuales se activan de forma independiente al pulsar una opción a través de 3 OptionButton que he colocado con el uso de Userform, sin embargo para activar el userform es necesario un botón de comando (o realizar algún código para su llamado).
    El problema es que necesito que el formulario quede fijo a la hoja de cálculo, es decir que este no sea llamado a través de un botón de comando, ni que se genere al abrir la hoja de cálculo, solo necesito que este fija como imagen.

    Los avances que tengo, son: que he fijado el formulario con la opción con (en más controles de la ficha de programador) Microsoft forms 2.0 Frame, es decir el formulario aparece y da la opción de añadir más controles dentro de la misma (funciona como un userform solo que fijo a la hoja de cálculo). El problema es que al querer asignar un código a cada botón o control realizado dentro de este “frame” no genera la opción.

    Esperando tengas alguna solución y me puedas ayudar me despido.
    Saludos Cordiales

    ResponderEliminar
    Respuestas
    1. Muchas gracias por el apoyo!
      Respecto a tu pregunta y planteamiento, entiendo que no has construido un UserForm desde el Editor, si no que has compuesto, con controles ActiveX algo que simula un UserForm para tenerlo siempre en la hoja de cálculo... ???

      He replicado este proceso y funciona como si fueran controles 'sueltos', bastaría hacer doble clic sobre ellos o botón derecho del raton y Ver código para acceder al editor y añadirle la funcionalidad con los procedimientos oportunos...

      Tendría que ver tu trabajo para saber exáctamente cuál es el problema...
      si quieres puedes enviarme el fichero a
      excelforo@gmail.com

      Un saludo

      Eliminar
  14. Ok te envio el fichero al correo expeuesto con el Asunto: APOYO DUDA FORMULARIO

    de ante mano espero me puedas ayudar muchas gracias.
    Saludos.

    ResponderEliminar
  15. Hola Ismael, estoy intentando replicar tu codigo para colocar una gráfica de excel en el formulario de Visual Basic. Pero no se que pasa cuando coloco NombreGIF = ThisWorkbook.Path&"\temporal1.gif" se me pone en rojo y dice que se esperaba fin de la instruccion... entonces mi pregunta es si ese \temporal1.gif es un nombre que yo me invento y/o tiene que estar conectado con algo. Agradezco tu colaboración,

    ResponderEliminar
    Respuestas
    1. Hola Ana,
      ese nombre
      NombreGIF = ThisWorkbook.Path & "\temporal1.gif"
      es, efectivamente, un nombre que te puedes inventar... y que queda posteriormente asociado para cargarlo como imagen en el formulario.
      Prueba copiando y pegando el código de la entrada, ya que no veo nada raro en cómo lo has escrito, si acaso asegúrate que están separadas las instrucciones:
      ThisWorkbook.Path & "\temporal1.gif"
      y no juntas
      ThisWorkbook.Path&"\temporal1.gif"

      Slds

      Eliminar
  16. Hola Ismael:
    tengo un problema con un formulario muy parecido al que tienes en tu tutorial.
    Mi problema es que quiero que en cuanto cambio los filtros de la gráfica también cambie la imagen que aprece en el formulario.

    Ya lo he intentado de varias maneras pero no he logrado conseguir lo que quiero.

    De antemano gracias amigo.

    Te envio el código para que lo revises, ojala y me puedas ayudar.

    Private Sub Graficar_Click()

    'Se llama a la función buscar para que se leccione los datos
    'que posteriormente se graficarán

    Buscar

    'Grafica con respecto a la afectación al OEE de cada máquina

    'Realiza una gráfica de barras
    If OpcionOEE.Value = True And OpcionBarras.Value = True Then
    Call GraficaBarrasmaquina_oee
    End If

    'Realiza una gráfica de lineas
    If OpcionOEE.Value = True And OpcionLineas.Value = True Then
    Call GraficaLineasmaquina_oee
    End If

    'Grafica con respecto al Tiempo de Paro de cada máquina

    'Realiza una gráfica de barras
    If OpcionTiempodeParo.Value = True And OpcionBarras.Value = True Then
    Call GraficaBarrasmaquina_tparo
    End If

    'Realiza una gráfica de lineas
    If OpcionTiempodeParo.Value = True And OpcionLineas.Value = True Then
    Call GraficaLineasmaquina_tparo
    End If

    'Se indica el gráfico que se va a insertar como imagen en el Formulario
    Set graficoactivo = Sheets(1).ChartObjects(1).Chart

    'Se le da nombre al archivo GIF donde exportaremos el gráfico
    'Guarda el archivo en la misma carpeta que el archivo de Excel
    NombreGIF = ThisWorkbook.Path & "\temporal.gif"
    graficoactivo.Export Filename:=NombreGIF, FilterName:="GIF"

    'Muestra la imagen GIF
    UserForm1.Image1.Picture = LoadPicture(NombreGIF)

    End Sub

    ResponderEliminar
  17. Hola Antonio,
    creo que te servirá la explicación dada a otro Lecto (Luis Menes) algo más arriba en esta misma entrada.
    Básicamente consiste en crear tantas cargas y ficheros GIF como gráficos, para que cada vez que cambies el tipo de gráfico realice el proceso completo...

    Espero te sirva.
    Un saludo

    ResponderEliminar
  18. Hola amigo buenas noches
    Algo despues pero esta muy cerca a lo que busco, mi duda con el primer tutorial es en que momento se especifico el grafico? Vaya tengo el boton y userform, presiono el boton y abre el userform, pero no m muestra la grafica y lo veo logico por que no creo haberla especificado

    Perdon si mi pregunta es tonta pero soy muy muy nuevo jeje
    Saludos

    ResponderEliminar
    Respuestas
    1. Para ser mas claro... En que momento se le dijo al userform, grafica por ejemplo "B1:H1"

      Gracias otra vez

      Eliminar
    2. Hola OJ Marsi,
      el gráfico a exportar primero y luego importar dentro de un UserForm se indica en la línea 3 del código:

      'indicamos qué gráfico vamos a insertar como imagen en el Formulario
      Set graficoactivo = Sheets(1).ChartObjects(1).Chart

      pero se identifica el OBJETO no el rango donde se encuentra!!

      Saludos

      Eliminar
  19. Eres lo máximo!! tu blog me ha ayudado demasiado !! Gracias!!

    ResponderEliminar
  20. Estimado Ismael es un gusto poder dirifirme a usted a través de este medio quisiera por favor solicitarle ayuda ya que no he podido lograr superar un inconveniente con respecto a este mismo tema lo que yo quisiera es copiar un rango de celdas como imagen y que a su vez esta imagen sea cargada en un control image en el formulario no se si sea esto posible por favor de tener usted algun aporte muchas gracias..

    Saludos
    Christian Araujo

    ResponderEliminar
    Respuestas
    1. Hola,
      todo dependerá de lo que contenga ese rango...
      si son datos puedes cargarlo en un listbox, por ejemplo.
      Si tal como indicas quieres cargarlo como imagen el problema pasa en primer lugar por copiar y pegar el rango en cuestión como imagen, para luego realizar la carga en el Userform, algo así:

      UserForm1.Image.Picture = LoadPicture (Worksheets("Hoja1").Shapes("Objeto 1"))

      siendo Objeto1 el nombre de la imagen obtenida a partir del rango..
      Saludos

      Eliminar
  21. Hola:

    Estoy trabajando unos macros en Excel para mostrar una figura que tengo en una pestaña llamada "Señal de Falla".

    Copio y Pego el código que pusiste con unas variaciones:
    -La pestaña se llama "Señal de Falla"
    -El Userform se llama "UserFormSimulador"
    -El lugar de la imágen es "Image7"

    Entonces pongo el código como te lo envío

    'indicamos qué gráfico vamos a insertar como imagen en el Formulario
    Set graficoactivo = Worksheets("Señal de Falla").ChartObjects(1).Chart
    'damos nombre al archivo GIF donde exportaremos el gráfico
    CorrienteFalla = ThisWorkbook.Path & "\temporal.gif"

    'redimensionamos el Alto y Ancho del objeto Imagen
    '(del recuadro donde insertamos el gráfico)
    alto = Worksheets("Señal de Falla").Shapes("1 Gráfico").Height
    ancho = Worksheets("Señal de Falla").Shapes("1 Gráfico").Width
    UserFormSimulador.Image7.Height = alto
    UserFormSimulador.Image7.Width = ancho
    Base = UserFormSimulador.Width
    altura = UserFormSimulador.Height

    UserFormSimulador.Image7.Top = (altura - alto) / 2
    UserFormSimulador.Image7.Left = (Base - ancho) / 2

    'Exportamos el gráfico al archivo GIF generado
    graficoactivo.Export Filename:=CorrienteFalla, FilterName:="GIF"

    'Colocamos la imagen Gif en el espacio destinado del Formulario
    UserFormSimulador.Image7.Picture = LoadPicture(CorrienteFalla)

    Pero al correrlo, me dice que no encuentra el elemento con el nombre especificado en la línea:
    alto = Worksheets("Señal de Falla").Shapes("1 Gráfico").Height

    Quisiera saber si me falta hacer algo o si el código está mal.

    Gracias por la ayuda

    ResponderEliminar
    Respuestas
    1. Hola José Luís,
      fíjate que en el caso expuesto en el blog estamos subiendo un gráfico con nombre '1 Gráfico' al formulario...
      si tu quieres llevar una imagen tendrás que fijarte cómo se llama la imagen en tu hoja de cálculo.. bastará te situés encima de la imagen y la selecciones para ver en el cuadro de nombres cómo se llama dicha imagen.
      Cunado tengas claro este nombre lo podrás usar y reemplazar en el ejemplo

      Saludos

      Eliminar
    2. Hola Ismael:

      Muchas gracias por la ayuda, ya me salió el gráfico que quería. Ahora tengo una duda, El gráfico se sale del cuadro de figura que creé en el UserForm. El cuadro de imágen tiene un tamaño de 198x300. Pero el gráfico que me sale tiene un tamaño mucho mayor y se sale, ¿Qué puedo hacer para que quede dentro del cuadro?

      Gracias por la ayuda.

      Eliminar
    3. Puedes cambiar las propiedades del Alto y Ancho de la Imagen, y adapatarlas a tamaño del cuadro de imagen de tu userForm.
      Saludos

      Eliminar
  22. Estimado amigo.
    Espero que puedas ayudarme.
    Quizás mi problema sea sencillo, pero por más vueltas que doy no consigo resolverlo y me urge muchísimo.
    Cuando entro en visual basic e inserto un userform, al pinchar sobre cualquier control y tratar de ponerlo en el formulario me da el mensaje "Acceso denegado".
    No había intentado hacer formularios hasta ahora pero (tengo la versión 2007 por cierto) en la hoja normal de datos, en "programador" y "Diseño" me inserta controles activex y controles de formulario perfectamente.
    Te agradezco de antemano tu ayuda.

    ResponderEliminar
    Respuestas
    1. Hola Francisco,
      es la primera vez que escucho algo parecido...
      Estamos hablando de ficheros nuevos abiertos por ti?.. lo digo por que a veces en ficheros de terceros se protege el proyecto de VBA con contraseñas y aparece un mensaje similar
      Saludos

      Eliminar
  23. HOLA ISMAEL, SOY NUEVO EN LA CREACION DE MACROS DE EXCEL, MI PREGUNTA ES SI PUEDE CREAR UNA HOJA DE EXCEL EN UN USERFORM,PARA QUE APARESCA COMO UN LISBOX

    ResponderEliminar
    Respuestas
    1. Hola Orlando,
      si es posible trasladar un rango de nuestra hoja de calculo a un UserForm, pero no tendría nunca la misma funcionalidad de selección que un ListBox.

      Saludos

      Eliminar
  24. Hola ismael, estoy corriendo tu metodo, pero resulta que me sale method or data member not found, y me subraya Image1, podrias ayudarme por favor

    ResponderEliminar
    Respuestas
    1. Hola,
      ¿has activado el control? y ¿has cambiado el nombre del gráfico??
      Slds

      Eliminar
  25. Hola que tal, he estado revisando la respuestas, validando varios codigos me funciona bien cuando lo utilizo por primera vez, pero cuando lo trato de abrir nuevamente o en otra compu, me sale el error 408, el de que no se puede cargar la imagen este es el codigo que utilizo.

    Private Sub UserForm_Initialize()
    'seleccionamos el grafico,,,,,
    Set grafico1 = Sheets("CONHORNO").ChartObjects(1).Chart

    ' guardamos el grafico como imagen jpg
    NombreGrafico = ThisWorkbook.Path & Application.PathSeparator & "HORNO3.JPG"
    grafico1.Export Filename:=NombreGrafico, FilterName:="JPG"

    ' llamamos y mostramos el grafico guardado
    Image1.Picture = LoadPicture(NombreGrafico)
    End Sub


    gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      tienes nombrado el control de la imagen como 'image1' ??
      Lo demás parece correcto...
      Revisa despacio lo expuesto en el post..

      Saludos

      Eliminar
    2. gracias por contestar, si asi lo tengo nombrado, crees que tega algún problema?, tu que me sugieres y tengo 8 mas userform solo cambian los nombres de cada gráfico . No se si pueda utilizar solo uno para ir visualizando en el mismo Userform, cerca de 10 graficas más, manipulado por varios botones, no se si me doy a entender.

      Eliminar
    3. Ummm
      quizá sea tu configuración de equipo.
      Echa un vistazo a
      https://support.microsoft.com/es-es/help/983246/-type-mismatch-error-message-when-you-run-a-vba-macro-in-a-64-bit-vers
      Slds

      Eliminar
  26. Excelente información! me sirvió muchísimo!

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.