2012-10-03 95 views
1

我正在使用Excel 2007 VBA在同一數據表中創建一個ScatterSmoothNoMarkers類型的圖表。我的源數據取決於打開的許多文本文件。 Xvalue固定@位置A2:A200。系列值列的ID將被更改。圖表的數據源變量在Excel中使用VBA

如果我打開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 

任何幫助將非常感激。

回答

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)) 

如果我誤解你的興趣,我會建議一些地方手動創建RangeString輸入 - 使用類似如下:

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我在上面引用(它從索引中獲取字母)。

+0

非常感謝Felix和Enderland的幫助。我使用了Endeland的輸入來創建ColumnLetter,它工作。它爲我節省了很多時間。我會稍後嘗試菲利克斯的。 – user1715892