Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择(单击)折线图(Excel)并将特定坐标存储在单元格或可用于VBA代码的变量中_Vba_Excel - Fatal编程技术网

选择(单击)折线图(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)
如果您希望用户能够从原始图表到精简图表来回切换,我建议使用原始图表的命名范围,并允许用户双击图表(可能是图表的特定部分)以恢复到完整的数据系列


希望您能这样做。

澄清点:您的意图是让用户在图形中选择一个点,而缩小的部分是用户点击两端的两个点吗?