Как выделить последнюю точку данных на точечной диаграмме с помощью VBA - PullRequest
0 голосов
/ 09 января 2020

Хотите знать, как добавить следующую особенность диаграммы рассеяния:

![chart

Я хочу определить конечную точку данных и спроецировать ее как выделенный разброс точка как выше

Вот мой текущий код:

Sub Graph()

' Creates scatter chart with provided limit/percentile values
'

    Dim my_range    As Range, t

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

    Dim OldSheet As Worksheet
    Set OldSheet = ActiveSheet

    Set my_range = Union(Selection, ActiveSheet.Range("A:A"))
    ActiveSheet.Shapes.AddChart2(201, xlLine).Select
    With ActiveChart
        .FullSeriesCollection(1).ChartType = xlLine
        .FullSeriesCollection(1).AxisGroup = 1
        .FullSeriesCollection(2).ChartType = xlLine
        .FullSeriesCollection(2).AxisGroup = 1
        .FullSeriesCollection(1).ChartType = xlXYScatter
        .FullSeriesCollection(1).AxisGroup = 1
        .SetSourceData Source:=my_range
        .HasTitle = True
        .ChartTitle.Text = t
        .Location Where:=xlLocationAsObject, Name:="Graphs"
    End With
    OldSheet.Activate


End Sub

1 Ответ

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

Последняя точка - .SeriesCollection(1).Points(Points.count). В верхней части сабвуфера добавьте переменную для хранения последней позиции точки данных. После того, как вы создали серию, добавьте любой код форматирования в отдельном операторе With, чтобы «выделить» его. Пример, который добавляет метку данных, приведен в онлайн-документации Microsoft по объекту точек: https://docs.microsoft.com/en-us/office/vba/api/excel.points (объект)

Похоже, что вы уже использовали запись макросов, чтобы продвинуться так далеко , Иногда из этого получается дерьмовый код, но на самом деле я нахожу, что форматирование записи - это хорошее применение рекордера, поскольку код форматирования диаграммы широко не охватывается во многих местах в Интернете, и вам необходимо go много объектов / свойств глубоко сделайте что-нибудь простое, например, раскрасьте точку данных синим или что-то в этом роде.

В итоге:

Dim LastPoint as Long
...
Set my_range = Union(Selection, ActiveSheet.Range("A:A"))
ActiveSheet.Shapes.AddChart2(201, xlLine).Select 
' when I recorded this, to go straight to an xychart, the code was
'  ActiveSheet.Shapes.AddChart2(240, xlXYScatter).Select
LastPoint = ActiveChart.SeriesCollection(1).Points.Count
With ActiveChart
...
End With
With ActiveChart.SeriesCollection(1).Points(LastPoint) ' for example:
    .MarkerSize = 7
    .MarkerStyle = 8
    .Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent2
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...