我正在使用Excel 2007 VBA在同一数据表中创建ScatterSmoothNoMarkers类型图表。我的源数据取决于打开的许多文本文件。 X值固定在@位置A2:A200。系列值的列ID将被更改。
如果我打开2files,我的源数据将是:Range(A2:A200, F2:G200)
。要打开3files,我的源数据将是: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
非常感谢任何帮助。
答案 0 :(得分: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)
This answer定义了我上面引用的函数ColumnLetter
(它从索引中获取了字母)。