我已在Excel 2003中已經工作罰款Excel的VBA的應用,但在Excel 2010年失敗Excel 2010中VBA ActiveChart.SetSourceData失敗
相對碼
Public Sub Create_Chart
Dim c
Dim OutputText As String
OutputText = OutputSource
Workbooks(NewWorkBook).Activate
With ActiveSheet
obj.Range(DataRange).NumberFormat = "0.0%"
ActiveSheet.ChartObjects(1).Activate
ActiveChart.ChartArea.Select
ActiveChart.SetSourceData Source:=obj.Range(DataRange)
End With
End Sub
出現錯誤消息時調試器到達ActiveChart.SetSourceData來源:= objNBR.Range(DataRange)與此窗口 -
的DataRange在調試器是F2:R2,F3:R3與obj指向右側Excel表格 -
的該ActiveChart是一個模板 -
我的調試器顯示 「ActiveChart.ChartArea.Select」 是真實的。而ActiveChart和obj是有效的對象。
最重要的是,Excel 2003工作正常。我使用調試器來比較Excel 2003和2010 obj和ActiveChart。在代碼方面我找不到什麼不同。我看到我的ActiveChart模板是在2003年有點不同 -
的原始模板是完全一樣顯示在2010,但它已自動在2003年被複制到工作表時清零相同唯一的區別我可以注意到2003年和2010年之間。我不知道這可能會導致此錯誤。
我不確定我是否錯過了任何證據。錯誤消息沒有提供太多細節。有沒有其他方法可以獲得更多的調試信息?
我很感激,如果有人可以幫我找到問題和解決辦法。
預先感謝
EDIT1:的OBJ在另一例程和DataRange創建的populeted在常規 -
Workbooks.Add
MyWorkbook = ActiveWorkbook.Name
Set obj = ActiveWorkbook.Worksheets(1)
,然後將數據插入到DataRange細胞 - F2: R2,F3:R3。我可以看到顯示正確數據的Excel文件。
EDIT2在上述子的工作簿(NewWorkBook)從這些代碼生成,我可以看到與圖表新的Excel顯示在屏幕上 -
Windows(Dir(TemplateFile)).Activate
ActiveWorkbook.Sheets("C1").Select
ActiveWorkbook.Sheets("C1").Copy
NewWorkBook = ActiveWorkbook.Name
Windows(NewWorkBook).Visible = True
EDIT3使用Sid的方法首先以這種方式聲明對象 -
Public Sub Create_Chart()
Dim wb As Workbook
Dim ws As Worksheet
Dim objChrt As ChartObject
Dim Chrt As chart
Set wb = Workbooks(NewWorkBook)
Set ws = wb.Sheets(1)
Set objChrt = ws.ChartObjects(1)
Set Chrt = objChrt.chart
With wb
obj.Range(DataRange).NumberFormat = "0.0%"
'Chrt.Export ("c:\temp\testChrt.gif")
'With obj.PageSetup
' .PrintArea = DataRange
' .Zoom = False
' .FitToPagesTall = 1
' .FitToPagesWide = 1
' .Orientation = xlLandscape
' End With
' obj.PrintOut Copies:=1
Chrt.SetSourceData Source:=obj.Range(DataRange)
End With
End Sub
錯誤是完全一樣的。請注意,我有註釋掉的代碼可以打印出來並保存Chrt和obj.Range(DataRange)對象。這些值與上面的圖像2和圖像3相同。所以圖表和數據在那裏。我只是想知道爲什麼「Chrt.SetSourceData源:= obj.Range(DataRange)」在2010年的這種情況下不起作用,但在2003年工作。
什麼是'obj'?什麼是'DataRange'?而不是使用ActiveChart或Activesheet,你可能想創建相關的對象並使用它? –
@SiddharthRout,obj是創建圖表的數據源表。 DataRange是從中提取數據的數據單元。在這種情況下,它是F2:R2,F3:R3。 – Don
嘗試聲明對象,然後使用它? –