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:
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:
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:
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:
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:
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:
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.
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:
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:
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:
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:
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.
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.
ResponderEliminarCuando 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...
Hola Alfredo,
Eliminarprueba 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
Yo también, tengo el mismo problema, accedo al menú herramientas, clickeo en controles adicionales, y no me aparece nada aun!!, que puedo hacer???
EliminarHola Ariel,
Eliminarasegúrate que haces clic derecho sobre la ventana de 'Cuadro de herramientas'.
Saludos
el grafico tiene que estar en la misma hoja de datos o puede estar en una hoja grafico aparte?
ResponderEliminarsaludos
Hola, que tal?!
Eliminarel 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
Hola amigo!
ResponderEliminarSe 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
Hola Jesús,
Eliminarfijate 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
Gracias de todas formas amigo, si lo resuelvo te pasare el dato
EliminarTe lo agradecería
Eliminar;-)
Un cordial saludo
Hola Ismael! Mil gracias por el tutorial, es muy claro.
ResponderEliminarSin 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!
Hola Carolina!
Eliminarel 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!!!
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.
ResponderEliminarBusque 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.
Hola José,
Eliminarel 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
Excelforo Ismael Romero:
EliminarEstoy 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
Hola Esther,
Eliminarnormalmente (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
Hola, amigo me podrias decir que tendria que hacer para insertar mas de 1 grafico??
ResponderEliminarHola,
Eliminardebo 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
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.
ResponderEliminarBueno 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
Hola Luis,
Eliminarmuchas 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
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...
EliminarSolo 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.
Muchisimas gracias por la explicación Luís,
Eliminarme alegro te sirviera
;-)
Un cordial saludo!!!
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.
ResponderEliminarTe mandé el archivo en Excel a tu correo de Gmail para que lo revises.
Muchas gracias!
Hola Luís, te adjunto la propuesta por email.
EliminarLa 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
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.
EliminarGracias por tu ayuda, eres una gran persona, mis bendiciones para ti hermano. Estaré al pendiente de tu respuesta, Saludos!!
Gracias a ti,
Eliminarrevisaré el fichero enviado.
Slds cordiales
Buenas:
ResponderEliminarComo 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
Hola,
Eliminares 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
? Como puedo que al dar Click en un CommandButton me cree uno Nuevo con un Nombre asignado
ResponderEliminarHola que tal estás?, espero te encuentres bien.
EliminarPuedes 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
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...
ResponderEliminarGracias + Abrazo mi correo es: luis_santos368@hotmail.com
Hola Luis Miguel,
Eliminarel 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
Al parecer te voy entendiendo. A ver si me explico un poco mejor....
ResponderEliminarEjemplo:
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.
Hola,
Eliminarlee 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
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):
ResponderEliminarLo 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
Muchas gracias por el apoyo!
EliminarRespecto 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
Ok te envio el fichero al correo expeuesto con el Asunto: APOYO DUDA FORMULARIO
ResponderEliminarde ante mano espero me puedas ayudar muchas gracias.
Saludos.
Ok,
Eliminarcontestaré a tu correo.
Slds
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,
ResponderEliminarHola Ana,
Eliminarese 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
Hola Ismael:
ResponderEliminartengo 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
Hola Antonio,
ResponderEliminarcreo 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
Hola amigo buenas noches
ResponderEliminarAlgo 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
Para ser mas claro... En que momento se le dijo al userform, grafica por ejemplo "B1:H1"
EliminarGracias otra vez
Hola OJ Marsi,
Eliminarel 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
Eres lo máximo!! tu blog me ha ayudado demasiado !! Gracias!!
ResponderEliminar;-)
Eliminarme alegro te haya sido de utilidad
Saludos
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..
ResponderEliminarSaludos
Christian Araujo
Hola,
Eliminartodo 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
Hola:
ResponderEliminarEstoy 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
Hola José Luís,
Eliminarfí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
Hola Ismael:
EliminarMuchas 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.
Puedes cambiar las propiedades del Alto y Ancho de la Imagen, y adapatarlas a tamaño del cuadro de imagen de tu userForm.
EliminarSaludos
Estimado amigo.
ResponderEliminarEspero 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.
Hola Francisco,
Eliminares 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
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
ResponderEliminarHola Orlando,
Eliminarsi 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
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
ResponderEliminarHola,
Eliminar¿has activado el control? y ¿has cambiado el nombre del gráfico??
Slds
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.
ResponderEliminarPrivate 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
Hola,
Eliminartienes nombrado el control de la imagen como 'image1' ??
Lo demás parece correcto...
Revisa despacio lo expuesto en el post..
Saludos
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.
EliminarUmmm
Eliminarquizá 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
Excelente información! me sirvió muchísimo!
ResponderEliminar