Recientemente, explicando en una formación de VB, surgió la cuestión de recorrer todos los gráficos de una hoja y modificar ciertas propiedades de estos, con el fin de homogeneizar los gráficos dispuestos...
Evidentemente podríamos ir uno a uno manualmente.. pero ¿y si fueran 70 gráficos?.
Veamos nuestros gráficos de partida, donde comprobamos que cada uno tiene unas dimensiones diferentes, así como (en base a estas dimensiones) las unidades del escalado de las etiquetas del eje vertical (de valores) son distintas en unos y otros.
En el post de hoy daremos una posible solución, donde con una sencilla macro recorreremos todos los gráficos de la hoja activa y personalizaremos:
1-las unidades menor/mayor del autoescalado de las etiquetas del eje vertical
2-tamaño (alto+ancho) del gráfico.
Así pues añadimos la siguiente macro dentro de un módulo estándar de nuestro proyecto de VB:
Tras ejecutar nuestra macro veremos:
Comprobando como el tamaño de cada gráfico es exactamente igual, y como las unidades de la escala del eje vertical es en todos los casos de 1.000... como indicamos en la macro.
Evidentemente podríamos ir uno a uno manualmente.. pero ¿y si fueran 70 gráficos?.
Veamos nuestros gráficos de partida, donde comprobamos que cada uno tiene unas dimensiones diferentes, así como (en base a estas dimensiones) las unidades del escalado de las etiquetas del eje vertical (de valores) son distintas en unos y otros.
En el post de hoy daremos una posible solución, donde con una sencilla macro recorreremos todos los gráficos de la hoja activa y personalizaremos:
1-las unidades menor/mayor del autoescalado de las etiquetas del eje vertical
2-tamaño (alto+ancho) del gráfico.
Así pues añadimos la siguiente macro dentro de un módulo estándar de nuestro proyecto de VB:
Sub RecorrerGraficos()
Dim grafico As ChartObject
Application.ScreenUpdating = False
Application.EnableEvents = False
'y para recorrer todos los gráficos de la hoja...
For Each grafico In ActiveSheet.ChartObjects
'activamos el gráfico sobre el que trabajar
grafico.Activate
With ActiveChart
'modificamos las unidades del autoescalado
With .Axes(xlValue)
.MinorUnit = 1000
.MajorUnit = 1000
End With
'y lsa dimensiones del gráfico
With .ChartArea
.Height = 115
.Width = 200
End With
End With
Next grafico
Application.ScreenUpdating = True
Application.EnableEvents = True
End SubTras ejecutar nuestra macro veremos:
Comprobando como el tamaño de cada gráfico es exactamente igual, y como las unidades de la escala del eje vertical es en todos los casos de 1.000... como indicamos en la macro.




No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.