Один из способов сделать это - разместить столбец гиперссылок в именованном диапазоне. Как только они появятся, достаточно просто сослаться на них из таблицы.
Не совсем уверен, что вы спрашиваете, но при нажатии на точку данных появляется окно сообщения со значением в ячейке рядом со значением / ячейкой Y.
Один из способов сделать это - разместить столбец гиперссылок в именованном диапазоне. Как только они появятся, достаточно просто сослаться на них из диаграммы.
Если у вас есть диаграмма на отдельном рабочем листе, то вы можете использовать следующий код (встроенный в модуль Chart Worksheet):
Private Sub Chart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim lngElementID As Long
Dim lngArg1 As Long
Dim lngArg2 As Long
'Only catch Left-Clicks
If Button = xlPrimaryButton Then
With ActiveChart
'Get the coordinates of what has been clicked
call .GetChartElement(x, y, lngElementID, lngArg1, lngArg2)
If lngElementID = xlSeries Then
If lngArg2 > 0 Then
'Range containing the messages to be displayed
Set varRange = Worksheets("Sheet1").[ChartURLs]
Call MsgBox(CStr(varRange(lngArg2, 1)))
End If
End If
End With
End If
End Sub
Если диаграмма только что встроена в обычную рабочую таблицу, это еще не все, поскольку нам нужно отлавливать события диаграммы с помощью WithEvents. Добавьте следующий код в новый модуль Class:
Option Explicit
Public WithEvents chartEvents As Chart
Private m_rngPopupMsgs As Range
Private Sub chartEvents_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim lngElementID As Long
Dim lngArg1 As Long
Dim lngArg2 As Long
Dim varRange As Variant
'Only catch Left-Clicks
If Button = xlPrimaryButton Then
With ActiveChart
'Get the coordinates of what has been clicked
.GetChartElement x, y, lngElementID, lngArg1, lngArg2
If lngElementID = xlSeries Then
If lngArg2 > 0 Then
If Not (m_rngPopupMsgs Is Nothing) Then
Set varRange = m_rngPopupMsgs
Call MsgBox(CStr(varRange(lngArg2, 1)))
End If
End If
End If
End With
End If
End Sub
Public Property Get PopupMsgs() As Range
Set PopupMsgs = m_rngPopupMsgs
End Property
Public Property Set PopupMsgs(rngPopupMsgs As Range)
Set m_rngPopupMsgs = rngPopupMsgs
End Property
Private Sub Class_Terminate()
Set m_rngPopupMsgs = Nothing
End Sub
Затем добавьте новый модуль Code и добавьте следующий код.
Option Explicit
Private m_objChtEvents As New clsChartEvents
Public Sub SelectChart(ByRef wks As Worksheet, ByRef rngPopupMsgs As Range)
Dim objChart As Chart
If wks.ChartObjects.Count > 0 Then
Set m_objChtEvents = New clsChartEvents
Set objChart = wks.ChartObjects(1).Chart
Set m_objChtEvents.chartEvents = objChart
Set m_objChtEvents.PopupMsgs = rngPopupMsgs
End If
End Sub
В модуле «Рабочий лист» рабочего листа, содержащего вашу диаграмму, необходимо добавить вызов процедуры SelectChart () из события Worksheet_Activate (или любого другого события по вашему вкусу) следующим образом, заменив «ChartURLs» именем Ваш диапазон:
Option Explicit
Private Sub Worksheet_Activate()
Call SelectChart(Me, Range("ChartURLs"))
End Sub
Надеюсь, это то, что вы ищете, если нет, то это должно быть, по крайней мере, хорошее начало.