将新系列添加到图表(VBA)时的应用程序定义或对象定义错误

时间:2018-03-27 09:31:23

标签: excel vba excel-vba charts

我尝试从该页面上的单个数据表动态地将新图表系列添加到单个图表中。但是,在.XValues命令期间,我一直在

  

运行时错误' 1004':应用程序定义或对象定义的错误。

我使用以下代码:

Sub addseries()

Dim endpt1 As Range
Dim endpt2 As Range
Dim Address1 As Range
Dim Address2 As Range

For x = 2 To (Sheets.Count - 1)
Cells(1, 2 * x - 1).Select
Selection.End(xlDown).Select
Set endpt1 = ActiveCell
Cells(1, 2 * x).Select
Selection.End(xlDown).Select
Set endpt2 = ActiveCell
Range(Cells(2, 2 * x - 1), endpt1).Select
Set Address1 = Selection
Range(Cells(2, 2 * x), endpt2).Select
Set Address2 = Selection

Debug.Print ("Last Row1: " & endpt1.Address & " Last Row2: " & endpt2.Address)
Debug.Print "x Range: " & Address1.Address
Debug.Print "Value Range: " & Address2.Address
'Add new series
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.SeriesCollection.NewSeries
'Set ranges for new series
ActiveChart.FullSeriesCollection(x).Name = ActiveSheet.Cells(1, 2 * x)
ActiveChart.FullSeriesCollection(x).XValues = "='Merged Plot'!Address1.Address()"
ActiveChart.FullSeriesCollection(x).Values = "='Merged Plot'!Address2.Address()"


Next x
End sub

这些是出现在即时窗口中的值:

Last Row1: $C$62 Last Row2: $D$62
x Range: $C$2:$C$62
Value Range: $D$2:$D$62

2 个答案:

答案 0 :(得分:3)

我觉得这样的事情。我会做出很多其他的改变,但目前你应该关注的两件事是:

1)X从2开始,但新系列从1开始,所以从X中删除1,例如ActiveChart.SeriesCollection(x - 1).Values

2)C̶o̶n̶c̶a̶t̶e̶n̶a̶t̶e̶̶t̶h̶e̶̶a̶d̶d̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶{̶"̶=̶'̶M̶e̶r̶g̶e̶d̶ ̶P̶l̶o̶t̶'̶!̶"̶ ̶&̶ ̶A̶d̶d̶r̶e̶s̶s̶2̶.̶A̶d̶d̶r̶e̶s̶s̶̶̶设置地址部分如下"=" & Address1.Address(False, False, xlA1, xlExternal)

感谢@Shai Rado关于使用Address1.Address(False, False, xlA1, xlExternal)

的说明
Option Explicit

Sub addseries()

    Dim endpt1 As Range
    Dim endpt2 As Range
    Dim Address1 As Range
    Dim Address2 As Range

    Dim x As Long

    For x = 2 To (Sheets.Count - 1)

        With ActiveSheet

            .Cells(1, 2 * x - 1).Select
            Selection.End(xlDown).Select
            Set endpt1 = ActiveCell
            .Cells(1, 2 * x).Select
            Selection.End(xlDown).Select
            Set endpt2 = ActiveCell
            .Range(.Cells(2, 2 * x - 1), endpt1).Select
            Set Address1 = Selection
            .Range(.Cells(2, 2 * x), endpt2).Select
            Set Address2 = Selection

            Debug.Print ("Last Row1: " & endpt1.Address & " Last Row2: " & endpt2.Address)
            Debug.Print "x Range: " & Address1.Address
            Debug.Print "Value Range: " & Address2.Address

            With ActiveSheet.ChartObjects("Chart 1").Chart
             .SeriesCollection.NewSeries
             .SeriesCollection(x - 1).Name = .Cells(1, 2 * x).Value
             .SeriesCollection(x - 1).XValues = "=" & Address1.Address(False, False, xlA1, xlExternal)
            .SeriesCollection(x - 1).Values = "=" & Address2.Address(False, False, xlA1, xlExternal)
           End With

        End With

    Next x
End Sub

答案 1 :(得分:0)

" =" &安培; Address1.Address(False,False,xlA1, xlExternal )成功了!