我已在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
尝试声明对象,然后使用它? –