Excel VBA – Obtener el gráfico de rango de datos

Quiero agregar datos a un montón de gráficos existentes. Se supone que cada tabla tiene un número diferente de series de datos, y que la ubicación de los datos en bruto que está en algún lugar en el mismo libro. Aquí es lo que estoy empezando con:

For iChart = 1 To iCount
    ActiveSheet.ChartObjects("Chart " & iChart).Activate
    intSeries = 1
    Do Until ActiveChart.SeriesCollection(intSeries).Name = ""
        Set rXVal = ActiveChart.SeriesCollection(intSeries).XValues '<- Object Required error
        Set rXVal = Range(rXVal, rXVal.End(xlDown))
        Set rYVal = ActiveChart.SeriesCollection(intSeries).Values
        Set rYVal = Range(rYVal, rYVal.End(xlDown))
        ActiveChart.SeriesCollection(intSeries).XValues = rXVal
        ActiveChart.SeriesCollection(intSeries).Values = rYVal
        intSeries = intSeries + 1
    Loop
Next iChart

Sé que ActiveChart...XValues = rXVal funciona, pero me estoy poniendo un «error» Requiere de Objeto en el Set rXVal = ActiveChart....XValues línea. Estoy asumiendo que desde un rango se llegó a definir la serie de datos, puedo obtener ese rango de vuelta de nuevo y, a continuación, añadir a la misma.

ACTUALIZACIÓN

Para aclarar un poco las cosas, he acelerómetros en 8 lugares y FFT software de configuración para grabar pico de la vibración de respuesta en 4 bandas de frecuencia separadas. Este rendimientos de los 32 puntos de datos por ejemplo. Cuando la exportación, el software escupe un libro de Excel con 4 hojas, una para cada banda de frecuencia. Cada hoja tiene el acelerómetro nombres de ir a través y números de muestra va hacia abajo.

  • Values y XValues (aunque se puede Establecer un rango, devolver una matriz variant) Tratar aquí para ayudar a los j-walk.com/ss/excel/tips/tip83.htm
  • Usted podría tratar de la declaración de una Serie de tipo variable, a continuación, analizar el rango de direcciones a partir de una propiedad, tales como .ForumlaR1C1. Por ejemplo: Dim s de la Serie: Conjunto s = ActiveChart.SeriesCollection(1): Debug.Imprimir s.FormulaR1C1
InformationsquelleAutor Kes Perron | 2015-02-05

2 Kommentare

  1. 8

    He logrado usando esta sintaxis:

    Dim rXVal() As Variant
    rXVal = ActiveChart.SeriesCollection(intSeries).XValues

    ACTUALIZACIÓN

    En este caso se obtiene una matriz, debido a que su sentencia dada (ActiveChart.SeriesCollection(intSeries).XValues) es una matriz y no un rango. Esto es lo que se ve en la ventana Locales si usted cava en la Serie objeto de ActiveChart.SeriesCollection(intSeries):

    Excel VBA - Obtener el gráfico de rango de datos

    (en mi maniquí datos que he filas denominado r1, r2, r3, r4.)

    Lo que quiero decir, XValues no tiene ninguna propiedad que indique su rango ocupado.

    Si usted realmente necesita un rango de, yo sugeriría conseguir desde el formula de la propiedad. Y la manera en que yo sugeriría es la sustitución de su error causando línea con esto:

    Set rXVal = Range(Split(ActiveChart.SeriesCollection(intSeries).Formula, ",")(1))

    Siguiente, veo que estás tratando de obtener el rango de Values. Asimismo, el uso de este:

    Set rYVal = Range(Split(ActiveChart.SeriesCollection(intSeries).Formula, ",")(2))

    Otra cosa.

    Las siguientes líneas le causa un error finalmente:

    intSeries = 1
    Do Until ActiveChart.SeriesCollection(intSeries).Name = ""
        ...some code...
        intSeries = intSeries + 1
    Loop

    Hacer el cambio con:

    For intSeries = 1 To ActiveChart.SeriesCollection.Count
        ...some code...
    Next

    Sin embargo, otra cosa.

    Considerar el uso de With y End With, como repetir un montón ActiveChart.SeriesCollection(intSeries). A continuación, el código será mucho más legible, como usted acaba de saltar esta larga línea! ¿No sería increíble???

    • Lo siento por el retraso, tuve que poner este proyecto y abordar una mayor prioridad de la tarea. El problema con esta solución es que devuelve una matriz de valores en lugar de la gama en la que los valores existen. Véase la pregunta de actualización de por qué eso es importante.
    • Gracias! Realmente agradezco las sugerencias, especialmente cuando para reemplazar el bucle do con un bucle for (que yo prefiero). Espero tener la oportunidad de trabajar en este proyecto más pronto. Voy a dejar que usted sabe cómo es la cosa.
  2. 0

    Esto funciona muy bien para mí:

    Dim rXVal() As Variant
    Dim rXValMin, rXValMax As Double
    
    rXVal = ActiveChart.SeriesCollection(intSeries).XValues
    rXValMin = WorksheetFunction.Min(rXVal)
    rXValMax = WorksheetFunction.Max(rXVal)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea