选择(单击)折线图(Excel)并将特定坐标存储在单元格或可用于VBA代码的变量中
我希望用户能够选择此图的线性部分: 这样我们就可以得到一个简化的截面,像这样:选择(单击)折线图(Excel)并将特定坐标存储在单元格或可用于VBA代码的变量中,vba,excel,Vba,Excel,我希望用户能够选择此图的线性部分: 这样我们就可以得到一个简化的截面,像这样: 这样做的目的是仅对缩小部分对应的值或数据点进行额外计算。@Jose Gabriel,我打算等到您在评论中回答我的问题,但我相信以下内容将为您提供所需的产品,您可以根据自己的需要进行定制 您所询问的基本过程涉及三个功能。 首先,报告用户在图表上单击的位置以及系列的对应点 (实际上,我建议双击,因为单击通常用于选择,双击用于操作) 第二,在序列集合值中找到所选点,以创建创建简化图表所需的两个(或更多)点 第三,修改图
这样做的目的是仅对缩小部分对应的值或数据点进行额外计算。@Jose Gabriel,我打算等到您在评论中回答我的问题,但我相信以下内容将为您提供所需的产品,您可以根据自己的需要进行定制 您所询问的基本过程涉及三个功能。 首先,报告用户在图表上单击的位置以及系列的对应点 (实际上,我建议双击,因为单击通常用于选择,双击用于操作) 第二,在序列集合值中找到所选点,以创建创建简化图表所需的两个(或更多)点 第三,修改图表显示的源数据 第一步-报告在图表系列中的位置 下面是一个链接,指向一个全面的、但绝对是初学者的演练,以确定用户选择了图表的哪个点/段 它所包含的内容远不止这些,但如果能让您充分了解哪些内容对您有用,那么它可能也会有所帮助 您在单行系列中查找的直接段大约是页面下方的三分之一。以下是一个摘录,其中仅包含适用于您的问题的代码:
Private Sub Chart_Select(ByVal ElementID As Long, _
ByVal Arg1 As Long, ByVal Arg2 As Long)
Dim sElement As String
Dim sArg As String
Select Case ElementID
'... several other case options
Case xlSeries
sElement = "Series " & Arg1
If Arg2 > 0 Then sArg = "Point " & Arg2
'... several other case options
End Select
MsgBox sElement & IIf(Len(sArg) > 0, vbCrLf & sArg, "")
End Sub
(注意:正下方是查找坐标x和y的部分)
因此,现在您有了用户在一系列中选择的段。选定的点始终是线段两个点中较高的点
第二步-发现所选点在序列集合中的位置
为了构建简化图表,必须在序列集合值中标识所选点,然后选择该点之前的点以创建简化图表
下面是一个类似问题的链接(以及链接下面的解决方案代码),尽管它将循环遍历所有图表的所有系列并设置最后一个值。如果需要,您可以通过只识别图表/系列来限制这一点
另外,您不需要添加最后一个值,相反,我建议您将上一个点存储在变量中,并检查当前点是否是用户选择的点。如果是这样的话,你有你的部分,可以重置你的图表
(请记住,您需要添加一个循环来迭代序列点中的每个点)
第三步-修改图表系列数据
现在,剩下的就是将图表重置为步骤2中确定的新点
这里有一个链接,但你甚至可能不需要它。
以下是用于演示分配常量值的代码示例:
Charts("Chart1").SeriesCollection(1).Values = Array(1, 3, 5, 7, 11, 13, 17, 19)
如果您希望用户能够从原始图表到精简图表来回切换,我建议使用原始图表的命名范围,并允许用户双击图表(可能是图表的特定部分)以恢复到完整的数据系列
希望您能这样做。澄清点:您的意图是让用户在图形中选择一个点,而缩小的部分是用户点击两端的两个点吗?