Ошибка во время выполнения 424 Требуется объект (объект Point) VBA - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь сделать окончательную точку данных на графике рассеяния «выделением» и быть идентифицированной. Используя: https://docs.microsoft.com/en-us/office/vba/api/excel.points (объект) Я придумал строку кода .FullSeriesCollection(1).Points(Points.Count).ApplyDataLabels Type:=xlShowValue, которая должна добавить метку к последней точке в серии 1.

Не знаю почему, но Я получаю ошибку

Ошибка времени выполнения '424': требуется объект

Вот мой полный код:

Sub Graph()

    Dim my_range As Range, t, co As Shape 

    t = Selection.Cells(1, 1).Value + " - " + ActiveSheet.Name

    Dim OldSheet As Worksheet
    Set OldSheet = ActiveSheet

    Set my_range = Union(Selection, ActiveSheet.Range("A:A"))

    Set co = ActiveSheet.Shapes.AddChart2(201, xlLine) 'add a ChartObject

    With co.Chart
        .FullSeriesCollection(1).ChartType = xlXYScatter
        .FullSeriesCollection(1).AxisGroup = 1
        .FullSeriesCollection(1).Points(Points.Count).ApplyDataLabels Type:=xlShowValue
        .FullSeriesCollection(2).ChartType = xlLine
        .FullSeriesCollection(2).AxisGroup = 1
        .SetSourceData Source:=my_range
        'highlight final dot of data
        .HasTitle = True
        .ChartTitle.Text = t
        ResolveSeriesnames co.Chart
        .Location Where:=xlLocationAsObject, Name:="Graphs"

    End With

    OldSheet.Activate
End Sub

Вот мой пример данных

enter image description here

1 Ответ

1 голос
/ 14 января 2020

1. Selection.Cells(1, 1).Value + " - " + ActiveSheet.Name Избегайте использования + для объединения. Используйте &. + выдаст ошибку, если Selection.Cells(1, 1).Value является числовым значением c.

2 Points.Count выдаст ошибку, поскольку она не полностью квалифицирована. Используйте .FullSeriesCollection(1).Points(.FullSeriesCollection(1).Points.Count).ApplyDataLabels Type:=xlShowValue.

3. Одна маленькая вещь. Чтобы показать метку даты последней точки, используйте .FullSeriesCollection(1).Points(.FullSeriesCollection(1).Points.Count - 1).ApplyDataLabels Type:=xlShowValue. Подсчет очков основан на 0. co.Chart.FullSeriesCollection(1).Points.Count даст вам общее количество очков, которое всегда на 1 меньше, чем вы можете физически считать. Я имею в виду, что подсчет первой точки начинается с 0

4. Аналогично, если вы хотите показать метку данных для 2-й серии, используйте .FullSeriesCollection(2).Points(.FullSeriesCollection(2).Points.Count - 1).ApplyDataLabels Type:=xlShowValue

5. Из чата: Если ваша последняя точка данных не имеет значения, вы не увидите метки данных для нее (очевидно). Поэтому, если вы хотите вернуться назад и показать метку данных для последнего значения, найдите последнюю строку в этом столбце, как показано Здесь , а затем выясните, нужно ли использовать (-1) или (-3) в .FullSeriesCollection(2).Points.Count - 1 чтобы получить желаемый результат.

Вы пытаетесь этого добиться?

Option Explicit

Sub Graph()
    Dim my_range As Range, t, co As Shape
    Dim OldSheet As Worksheet
    Set OldSheet = ActiveSheet

    t = Selection.Cells(1, 1).Value & " - " & ActiveSheet.Name

    Set my_range = Union(Selection, ActiveSheet.Range("A:A"))

    Set co = ActiveSheet.Shapes.AddChart2(201, xlLine) 'add a ChartObject

    With co.Chart
        .FullSeriesCollection(1).ChartType = xlXYScatter
        .FullSeriesCollection(1).AxisGroup = 1
        .FullSeriesCollection(1).Points(.FullSeriesCollection(1).Points.Count - 1).ApplyDataLabels Type:=xlShowValue

        .FullSeriesCollection(2).ChartType = xlLine
        .FullSeriesCollection(2).AxisGroup = 1

        .SetSourceData Source:=my_range
        'highlight final dot of data
        .HasTitle = True
        .ChartTitle.Text = t
        'ResolveSeriesnames co.Chart
        .Location Where:=xlLocationAsObject, Name:="Graphs"
    End With

    OldSheet.Activate
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...