Как ссылаться на «активную / выбранную» точку данных диаграммы в Excel, используя VBA - PullRequest
1 голос
/ 01 апреля 2020

Я ищу способ ссылки на активную / выбранную точку данных диаграммы в Excel, используя VBA.

Представьте, что у меня есть линейная диаграмма, к которой я хотел бы добавить панель ошибок. Но я не хочу добавлять полосы ошибок ко всей серии, а только к ОДНОЙ, выбранной точке. См. Экран ниже:

enter image description here

Я хочу добавить вертикальную полосу ошибок, которая бы указывала вниз по оси X, что-то вроде это: enter image description here

Я ЗНАЮ, как это сделать в Excel, есть несколько способов, например, добавить новую одноточечную серию и затем добавить строку ошибок. Есть и другие способы. У меня проблема в том, КАК ссылаться на активную / выбранную точку данных.

Если бы я решил создать новую серию из одной точки, мне нужно знать номер точки, чтобы сделать это. Я знаю (я использовал это), что вы можете ссылаться на точки с помощью объекта / метода Точки. К сожалению, я не знаю, как извлечь номер выбранной точки, координаты, что угодно, поэтому я могу работать с ним позже в моем проекте.

Я не могу добавить какой-либо код, поскольку все, что я сделал, это форматирование и игра с панелями ошибок, а также итерация по существующим, ВСЕМ точкам данных (в этом случае код не будет использоваться). То, что я ищу, - это информация о выбранных точках, поэтому я мог бы ссылаться на нее как .Point (x), где x - это мой ранее извлеченный номер точки, без необходимости сразу ссылаться на номер точки, как .Point (8) (я делаю не знаю специфицированного c числа, так как я только что щелкнул по нему).

Я видел способ извлечь его, используя события диаграммы, но это излишество для того, что я хочу сделать в своем маленьком простой проект (особенно как ссылаться на «извлеченную» точку в других макросах вне модуля класса).

Есть идеи? Мы очень ценим любую помощь, так как я потерян через 3 дня, пытаясь найти способ обратиться к ней.

1 Ответ

3 голосов
/ 01 апреля 2020

Чтобы получить индекс, вы можете проанализировать Name точки в формате:

S<series number>P<point number>

Sub Test()
    If TypeOf Selection Is Point Then        
        Dim p as Point
        Set p = Selection

        Debug.Print CLng(Split(p.Name, "P")(1)) ' this is p's index
    End If
End Sub

Чтобы получить больше Информация об этой точке, такая как значения x и y, возможно, вы могли бы сделать следующее:

Sub Test()
    If TypeOf Selection Is Point Then
        Dim p As Point
        Set p = Selection

        Dim i As Long
        i = CLng(Split(p.Name, "P")(1))

        Dim s As Series
        Set s = p.Parent

        Debug.Print s.Values(i) ' Values is a one-based array so you can use the point index to get its corresponding value
        Debug.Print s.XValues(i)
    End If
End Sub
...