Ubicacion de los graficos via macro

Tengo un pequeño problema para la creación de gráficos. Y es básicamente respecto a la posición de mismo, y a veces en cuanto a sus dimensiones:
Con la grabadora obtuve el código que adjunto al final, la idea es la siguiente:
Tengo una tabla un botón para llenarla y otro para hacer el gráfico (la idea después es eliminar este botón e incluir el procedimiento luego del llenado en forma automática, pero eso no sería problema).
Bueno el botón me hace el llamado al gráfico una vez que los datos están llenos, el rango es:
"E16:J29", mi problema es: ¿Cómo puedo dejar que el gráfico iempre se despliegue a la altura de la celda c33?, con la redimensión del gráfico este debería quedar abajo de la tabla, el problema es que si lo llamo a veces me aparece más arriba otras más abajo aveces encima de la tabla y lo deseo abajo para hacer una presentación. Y basado en lo mismo, ¿cómo hago para que me borre el gráfico y cree otro si hago nuevamente el llamado? (Al final le agregue un nombre al gráfico activo así no me molesta si su nombre varía cada vez que lo creaba)
¿Se entendió la pregunta?, espero que si
Ahh lo olvidaba, ¿en un gráfico de barras como hago pra que se vean los valores sobre cada barra? (Siempre en macro)
Gracias de antemano
Narom
Pd:por cierto, a hora le agregué otro gráfico que es lamado en el mismo proceso y este siempre mantiene la misma posició respecto al primero (es decir, a unas cuantas celdas más abajo, por lo que creo que el tema de ubicación es relatia, pero no sé como fijar la primera posición)
Pd: en cursiva y negrita puse la parte que no me estaría cumpliendo la función requerida
Sub grafico1()
'
' Macro1 Macro
' Macro grabada el 18-06-2009 por emoran
'
'
    Range("E16:J29").Select
    Charts.Add
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("E16:J29"), PlotBy _
        :=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "TITULODEL GRAFICO"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "MESES"
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
    ActiveSheet.ChartObjects(1).Name = "Graf1"
    ActiveSheet.ChartObjects("Graf1").Activate
    ActiveChart.ChartArea.Select
ActiveSheet. Shapes("Graf1"). IncrementLeft -100
    ActiveSheet. Shapes("Graf1"). IncrementTop 220

    ActiveSheet. Shapes("Graf1"). ScaleWidth 1.44, msoFalse, msoScaleFromTopLeft
    ActiveSheet. Shapes("Graf1"). ScaleHeight 1.17, msoFalse, msoScaleFromTopLeft
End Sub

1 Respuesta

Respuesta
1
Yo me he grabado la macro y te explico lo que veo que te falta:
1º Para que te aparezcan los valores en las barras despues  del End With faltaría esto:
ActiveChart.PlotArea.Select
    ActiveChart.ApplyDataLabels AutoText:=True, LegendKey:=False, _
        HasLeaderLines:=False, ShowSeriesName:=False, ShowCategoryName:=False, _
        ShowValue:=True, ShowPercentage:=False, ShowBubbleSize:=False
2º He modificado primero la escala y después he situado el lugar donde quiero que se sitúe el gráfico y después de tu linea:
ActiveChart.ChartArea.Select
Yo lo he puesto así:
ActiveSheet. Shapes("Graf1").ScaleWidth 1.44, msoFalse, _
        MsoScaleFromTopLeft
    ActiveSheet. Shapes("Graf1").ScaleHeight 1.17, msoFalse, _
        MsoScaleFromTopLeft
    ActiveWindow.Visible = False
    Windows("Libro1"). Activate
       ActiveSheet. ChartObjects("Graf1"). Activate
    ActiveChart.ChartArea.Select
    ActiveSheet. Shapes("Graf1"). IncrementLeft -100
    ActiveSheet. Shapes("Graf1"). IncrementTop 220
End Sub
En definitiva a mí esta macro me funciona correctamente
Sub grafico1()
    Charts.Add
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Sheets("Hoja2").Range("E16:J29"), PlotBy _
        :=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja2"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "TITULODEL GRAFICO"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "MESES"
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
    ActiveChart.PlotArea.Select
    ActiveChart.ApplyDataLabels AutoText:=True, LegendKey:=False, _
        HasLeaderLines:=False, ShowSeriesName:=False, ShowCategoryName:=False, _
        ShowValue:=True, ShowPercentage:=False, ShowBubbleSize:=False
    ActiveSheet.ChartObjects(1).Name = "Graf1"
    ActiveSheet.ChartObjects("Graf1").Activate
    ActiveChart.ChartArea.Select
    ActiveSheet. Shapes("Graf1").ScaleWidth 1.44, msoFalse, _
        MsoScaleFromTopLeft
    ActiveSheet. Shapes("Graf1").ScaleHeight 1.17, msoFalse, _
        MsoScaleFromTopLeft
    ActiveWindow.Visible = False
    Windows("Libro1"). Activate 'OJO CON EL NOMBRE DEL LIBRO
       ActiveSheet. ChartObjects("Graf1"). Activate
    ActiveChart.ChartArea.Select
    ActiveSheet. Shapes("Graf1"). IncrementLeft -50
    ActiveSheet. Shapes("Graf1"). IncrementTop 140
End Sub
Pone los valores a las columnas pero si son tantas como pones aquí va a ser una imagen malísima de gráfico, en fin tu decides. Los valores de Increment quedan en la celda C33 la esquina superior izquierda, de todas formas para que tu cambies los valores en tiempo de ejecución haces esto, te sitúas en la macro y reduces la ventana de visual de forma que te permita ver la hoja del libro y marcas la primera linea de código y ahora vas pulsando F8 para que vaya leyendo linea a linea y veas lo que hace la macro, cuando llegues a las lineas de Increment o de Scale pulsas una vez y ves donde sitúa el gráfico, si no es de tu gusto modifica los valores y subes la flecha de la izquierda para que vuelva a leer la anterior linea de código y ves como funciona los valores.
Me explico claramente si has ejecutado la linea de código:
ActiveSheet. Shapes("Graf1"). IncrementLeft -50
Y no te gusta la posicion que ha quedado, subes la flecha amarilla de la izquierda otra vez a esa misma linea, dejas el valor al contrario para que vuelva a su posicion original
ActiveSheet. Shapes("Graf1"). IncrementLeft 50
Y vuleves a subir la flecha ahora corriges el valor para probar otro punto
ActiveSheet. Shapes("Graf1"). IncrementLeft -60 'Por ejemplo
y vuelves a ejecutar con F8 esto lo repites tantas veces como sea necesario para ajustar tu grafico a tu gusto.
Espero haberme hecho entender.
>Un saludo
>Julio
PD: Si te ha servido puntúa y finaliza la consulta, lo de F8 te sirve para todas las macros.
Muchas gracias, uego de analizar el tema de las etiquetas, defiitivamente no las he colocado, ya que pese a que muchos de esos valores me daban cero, también aparecían en el gráfico y se veía feo como bien decías.
Aunque tuve que eliminar esta parte:
ActiveChart.ApplyDataLabels AutoText:=True, LegendKey:=False, _
        HasLeaderLines:=False, ShowSeriesName:=False, ShowCategoryName:=False, _
        ShowValue:=True, ShowPercentage:=False, ShowBubbleSize:=False

Ya que me decía error, no se encontró argumento con nombre (¿?).
El gráfico se queda donde lo solicito (bueno si muevo un poco la pantalla se coloca más abajo, pero como pretendo lanzarlo apenas llene la tabla, no debería tener problema.
Mi duda es: hay algún procedimiento "automático para borrar este gráfico?, porque como bien decía, si hago un nuevo llamado al gráfico se me genera otro y como el procedimiento es sobre "graf1", el nuevo queda creado y el escalamiento y movimiento se produce sobre el primero (y como te mencionaba el gráfico se llena con datos de una tabla que va cambiando, por lo que al lanzar uno nuevo no necesito que esté el anterior).
Creo que esto se haría actuando sobre "ActiveSheet.ChartObjects(1)" (si creo dos gráficos el indice se va asignando a medida que aparecen, ¿cierto?), pero no estoy muy claro como.
De antemano muchas gracias me has ayudado bastante (y no, no tenía idea de la funcio del F8)
Narom

La instrucción para seleccionar el gráfico y eliminarlo es esa precisamente selecciona y elimina:
ActiveSheet.Shapes("Graf1").Delete
Y a continuación insertas el nuevo gráfico si quieres le asignas el mismo nombre y así te sirve la macro y el rango de valores.
>Un saludo
>Julio
Muchas gracias por todo, soo al final cambié la sentencia por:
ActiveSheet.ChartObjects(1).Delete
Así evito usar los nombres y si lo meto en un ciclo for puedo borrar varios gráficos.
Muy claro, rápido y dispuesto.
Nada que decir:
you got 5 yeses (lo siento, mucho BGT)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas