martes, 2 de enero de 2018

VBA: Recorrer todos los gráficos modificando autoescala y otros

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.

VBA: Recorrer todos los gráficos modificando autoescala 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 Sub



Tras ejecutar nuestra macro veremos:

VBA: Recorrer todos los gráficos modificando autoescala y otros


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