Pocisión y tamaño de gráfico en excel...

Es mi primer pregunta y no he logrado encontrar respuesta en las ya publicadas.
Quisiera posicionar y dar tamaño a un gráfico con mucha precisión. El resultado que obtengo haciéndolo con el mouse es malo, ya que debo colocar tres gráficos en línea y deben coincidir milimétricamente.
¿Alguien sabe cómo hacer eso?

1 Respuesta

Respuesta
1
Si se trata de igualar el tamaño de los 3 gráficos y ponerlos en vertical, el código podría ser:
Sub Ajustar3GráficosEnVertical()
    Dim co1 As ChartObject, co2 As ChartObject, co3 As ChartObject
    Set co1 = ActiveSheet.ChartObjects(1)
    Set co2 = ActiveSheet.ChartObjects(2)
    Set co3 = ActiveSheet.ChartObjects(3)
    'Se igualarán los gráficos 2 y 3 al tamaño del gráfico 1
    co2.Width = co1.Width
    co3.Width = co1.Width
    co2.Height = co1.Height
    co3.Height = co1.Height
    'Alinear exactamente a la izquierda los 3 gráficos
    co2.Left = co1.Left
    co3.Left = co1.Left
    'Poner el gráfico 2 justo debajo de 1
    co2.Top = co1.Top + co1.Height
    'Poner el gráfico 3 justo debajo de 2
    co3.Top = co2.Top + co2.Height
    Set co1 = Nothing
    Set co2 = Nothing
    Set co3 = Nothing
End Sub
Y si hubiera que ponerlos en horizontal:
Sub Ajustar3GráficosEnHorizontal()
    Dim co1 As ChartObject, co2 As ChartObject, co3 As ChartObject
    Set co1 = ActiveSheet.ChartObjects(1)
    Set co2 = ActiveSheet.ChartObjects(2)
    Set co3 = ActiveSheet.ChartObjects(3)
    'Se igualarán los gráficos 2 y 3 al tamaño del gráfico 1
    co2.Width = co1.Width
    co3.Width = co1.Width
    co2.Height = co1.Height
    co3.Height = co1.Height
    'Alinear exactamente arriba los 3 gráficos
    co2.Top = co1.Top
    co3.Top = co1.Top
    'Poner el gráfico 2 justo a la derecha de 1
    co2.Left = co1.Left + co1.Width
    'Poner el gráfico 3 justo a la derecha de 2
    co3.Left = co2.Left + co2.Width
    Set co1 = Nothing
    Set co2 = Nothing
    Set co3 = Nothing
End Sub
Hay que tener en cuenta que el gráfico que "manda" sobre los otros dos es el primero que se haya creado. Se podría cambiar esto para que fuera uno de los otros dos, pero habría que modificar el código.
El código habría que situarlo en un módulo entrando en el editor de VBA (Alt F11) y creando uno (Insertar -> Módulo). Conviene que lo pruebes en una copia del libro, no sea que no haga exactamente lo que necesitas.
Estimado jrgces,
Ante todo muchas gracias por la ayuda! Hace dos meses que estoy tratando de hacer esto y en sólo un día me has enviado un principio de solución! Es un gran avance y lo valoro mucho!
He colocado el código y funciona muy bien, sólo hay algunos problemas que ajustar:
1. El tamaño del gráfico es el mismo, ¿pero no el área donde se realiza el trazado ya que los gráficos 2 y 3 no tienen el eje de las "y". Se puede ajustar este detalle?
2. Existe alguna posibilidad de pocisionar cada una de estas áreas de trazado exactamente a continuación una de otra. ¿Tal cuál como lo hacen los bordes externos del gráfico con la macro que armaste?
Te mando un saludo y muchas gracias,
Ricardo
Es muy complicado lo que necesitas porque en el tamaño del área de trazado influyen muchas cosas, incluyendo si el gráfico tiene o no titulo y leyenda, los números de la/s escala/s, el tamaño de su fuente, etc.
Sin ver los gráficos me resulta imposible hacer nada, así que si quieres envíame un ejemplo a excel ARROBA jrgc. Es. Pero ya te digo que puede resultar muy complicado.
Estimado jrgces,
Adjunto te envío el archivo de ayuda. Como verás utilicé tu código y funciona muy bien, pero seria óptimo si pudiera hacerlo con las áreas de trazado.
Como verás también, el gráfico 2 y 3 no tienen eje de las "y", no tienen títulos, ni ningún otro texto, además los ejes están forzados a unos valores y éstos no pueden cambiar automáticamente. También quité la autoescala en el tamaño del texto, donde utilizo el tipo de letra Arial Narrow con altura 9. Todo esto para simplificar el problema del cambio automático de tamaño del área de trazado.
Desde ya valoro enormenete tu ayuda. Te envío un gran saludo desde Argentina,
Ricardo
Resulta posible igualar mediante código el tamaño de las áreas de trazado de los tres gráficos (sus objetos PlotArea), pero aunque Excel permite igualar el tamaño del área de trazado con las del propio gráfico, la realidad es que Excel "se reserva" algo de espacio alrededor del área de trazado lo que imposibilita que las áreas de los gráficos queden contiguas.
En cualquier caso, las instrucciones para que las áreas de trazado sean lo más grandes posible son:
    'Ampliar lo máximo posible las áreas de trazado de los 3 gráficos
    co1.Chart.PlotArea.Height = co1.Height
    co2.Chart.PlotArea.Height = co2.Height
    co3.Chart.PlotArea.Height = co3.Height
    co1.Chart.PlotArea.Width = co1.Width
    co2.Chart.PlotArea.Width = co1.Width
    co3.Chart.PlotArea.Width = co1.Width
Habría que ponerlas al final del código, antes de la instrucción
    Set co1 = Nothing
Ooops, las instrucciones 2ª y 3ª no están bien (cosas del copiado-pegado). Deberían ser:
    co2.Chart.PlotArea.Height = co1.Height
    co3.Chart.PlotArea.Height = co1.Height
Pese a que mi pedido era realmente difícil, jrgc me aulló muchísimo. Y si bien aún no logro exactamente lo que quería creo que ya tengo una buena aproximación.
Les agradeazo mucho por la ayuda!
Saludos desde Argentina,
Ricardo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas