我有一个三列表。其中两列提供用于生成散点图的xy值。第三列包含超链接。因此每行包含x值,y值和超链接(每个链接都是唯一的)。当我点击excel散点图上的数据点时,如何获取相应超链接的单元格地址?
答案 0 :(得分:1)
这样做的一种方法是将您的超链接列放在命名范围内。一旦它们出现,它就可以直接从图表中引用它们。
不完全确定你在问什么,但是当点击数据点时,会弹出一个Y值/单元格旁边单元格中值的消息框。
这样做的一种方法是将您的超链接列放在命名范围内。一旦它们出现,它就可以直接从图表中引用它们。
如果您在单独的图表工作表上有图表,那么您可以使用以下代码(嵌入在图表工作表模块上):
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来捕获Chart事件。将以下代码添加到新的类模块:
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
然后添加一个新的代码模块并添加以下代码。
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
在包含您的图表的工作表的工作表模块中,您需要从Worksheet_Activate事件(或您喜欢的任何其他事件)添加对SelectChart()过程的调用,如下所示,将“ChartURLs”替换为名称为你的范围:
Option Explicit
Private Sub Worksheet_Activate()
Call SelectChart(Me, Range("ChartURLs"))
End Sub
希望这是你正在寻找的东西,如果不是那么它至少应该是一个好的开始。