1

我正在使用 Excel 2007 VBA 在同一数据表中创建 ScatterSmoothNoMarkers 类型图表。我的源数据取决于打开的许多文本文件。Xvalue 在位置 A2: A200 是固定的。Series 值的列 ID 将被更改。

如果我打开 2个文件,我的源数据将是: Range(A2:A200, F2:G200). 要打开 3 个文件,我的源数据将是: Range(A2:A200, H2:J200) 等等……所以我需要用变量替换那些列 ID。但是在设置数据源时出现错误。这是我的代码:

Sub addChart()
Dim n as integer ‘files count and also the number of columns for chart1 
Dim intColStart, intColStop as integer  ‘number of columns for chart 1
intColStart = n*2+2  ‘this is a formula to find the ID of the start column of chart1
intColStop = n*3+1  ‘this is a formula to find the ID of the stop column of chart1
…..
With ActiveSheet.ChartObjects.Add _
         (Left:=100, Width:=375, Top:=75, Height:=225)
        .Chart.SetSourceData Source:=Sheets("Sheet1").Range("A2:A200, intColStart:intColStop ")  ‘’’’’PROBLEM RIGHT HERE‘’’’’’’
        .Chart.ChartType = xlXYScatterSmoothNoMarkers
……..
End With
End Sub 

任何帮助都感激不尽。

4

1 回答 1

0

您不能引用"标记内的变量。VBA 不知道要转换它们,因此它认为您正在设置一个Range包含文本,您实际上是在尝试使用该文本

A2:A200, intColStart:intColStop 

这对 VBA 没有任何意义。

为什么不换线

    .Chart.SetSourceData Source:=Sheets("Sheet1").Range("A2:A200, intColStart:intColStop ") 

    .Chart.SetSourceData Source:=Sheets("Sheet1").Range(Cells(2,2), Cells(200,intColStop))

如果我误解了您的兴趣,我会建议您手动创建Range String输入 - 使用类似以下内容:

dim rngStr as String
dim firstColStr as String
dim secondColStr as String
firstColStr = ColumnLetter(intColStart)
secondColStr = ColumnLetter(intColStop)
rngStr = "A2:A200," & firstColStr & ":2:" & secondColStr & "200"
...

.Chart.SetSourceData Source:=Sheets("Sheet1").Range(rngStr)

这个答案定义了ColumnLetter我在上面引用的函数(它从索引中获取字母)。

于 2012-10-03T12:39:54.400 回答