Vba excel中的可点击图表

Vba excel中的可点击图表,vba,excel,excel-formula,Vba,Excel,Excel Formula,我想创建一个带有链接表的饼图,但当我单击该图时,在代码的“WorkSheetFunction.Index”行上出现了一些错误,“Compile error Argument not optional”。 我是VBA编码的初学者。。请帮忙 这是我的密码 此工作簿模块 Dim ChartObjectClass As New Class1 Dim ChartObjectClass2 As New Class2 Private Sub Workbook_Open() Set ChartObj

我想创建一个带有链接表的饼图,但当我单击该图时,在代码的“WorkSheetFunction.Index”行上出现了一些错误,“Compile error Argument not optional”。 我是VBA编码的初学者。。请帮忙 这是我的密码

此工作簿模块

Dim ChartObjectClass As New Class1
Dim ChartObjectClass2 As New Class2

Private Sub Workbook_Open()
    Set ChartObjectClass.ChartObject = Worksheets(1).ChartObjects(1).Chart
    Set ChartObjectClass2.ChartObject = Worksheets(1).ChartObjects(2).Chart
End Sub
Option Explicit
Public WithEvents ChartObject As Chart

Private Sub ChartObject_MouseUp(ByVal Button As Long, ByVal Shift As Long, _
    ByVal x As Long, ByVal y As Long)
    Dim ElementID As Long, Arg1 As Long, Arg2 As Long
    Dim myX As Variant, myY As Double
    With ActiveChart
        .GetChartElement x, y, ElementID, Arg1, Arg2
        If ElementID = xlSeries Or ElementID = xlDataLabel Then
            If Arg2 > 0 Then
                myX=WorksheetFunction.Index(.SeriesCollection(Arg1).XValues.Arg2)
                myY=WorksheetFunction.Index(.SeriesCollection(Arg1).Values.Arg2)
                MsgBox "Series" & Arg1 & vbCrLf & """" & .SeriesCollection(Arg1)_
                    .Name & """" & vbCrLf & "Point" & Arg2 & vbCrLf & _
                        "x= " & myX & vbCrLf & "y= " & myY
                Range("A1").Select
                On Error Resume Next
                Sheets("Series" & myX & "Detail").Select
                Range("A1").Select
                On Error GoTo 0
            End If
        End If
    End With
End Sub
课程模块

Dim ChartObjectClass As New Class1
Dim ChartObjectClass2 As New Class2

Private Sub Workbook_Open()
    Set ChartObjectClass.ChartObject = Worksheets(1).ChartObjects(1).Chart
    Set ChartObjectClass2.ChartObject = Worksheets(1).ChartObjects(2).Chart
End Sub
Option Explicit
Public WithEvents ChartObject As Chart

Private Sub ChartObject_MouseUp(ByVal Button As Long, ByVal Shift As Long, _
    ByVal x As Long, ByVal y As Long)
    Dim ElementID As Long, Arg1 As Long, Arg2 As Long
    Dim myX As Variant, myY As Double
    With ActiveChart
        .GetChartElement x, y, ElementID, Arg1, Arg2
        If ElementID = xlSeries Or ElementID = xlDataLabel Then
            If Arg2 > 0 Then
                myX=WorksheetFunction.Index(.SeriesCollection(Arg1).XValues.Arg2)
                myY=WorksheetFunction.Index(.SeriesCollection(Arg1).Values.Arg2)
                MsgBox "Series" & Arg1 & vbCrLf & """" & .SeriesCollection(Arg1)_
                    .Name & """" & vbCrLf & "Point" & Arg2 & vbCrLf & _
                        "x= " & myX & vbCrLf & "y= " & myY
                Range("A1").Select
                On Error Resume Next
                Sheets("Series" & myX & "Detail").Select
                Range("A1").Select
                On Error GoTo 0
            End If
        End If
    End With
End Sub

在您的例子中,索引需要两个参数。第一个参数指定要从中返回值的值数组。第二个参数指定要返回的数组中的第n个元素

myX = WorksheetFunction.Index(.SeriesCollection(Arg1).XValues, Arg2)
myY = WorksheetFunction.Index(.SeriesCollection(Arg1).Values, Arg2)
顺便说一下,您也可以不使用WorksheetFunction.Index

myX = .SeriesCollection(Arg1).XValues()(Arg2)
myY = .SeriesCollection(Arg1).Values()(Arg2)

欢迎来到我认为在学习编程语言时,在进入高级概念之前,从基础知识开始,熟悉基本语法和常用的编码方法是很重要的-在本例中,使用事件捕捉
模块。我不理解原始代码中的一些变化,一个例子是如何引用自定义类型
Class1
Class2
,它们在您的代码和原始代码中都不存在……如果您要继续,可以从一个更简单的方法开始。更好的方法是,从学习VBA开始,可能是使用and(这假设您已经“非常熟悉”使用Excel工作表)。此外,请参阅此处的主题以及“”以及如何创建。祝你好运