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