我有一个 Excel VBA 应用程序,它在 Excel 2003 中运行良好,但在 Excel 2010 中失败。
相关代码是
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 Source:=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 -
Workbooks.Add
MyWorkbook = ActiveWorkbook.Name
Set obj = ActiveWorkbook.Worksheets(1)
然后将数据插入到 DataRange 单元格 - F2:R2、F3:R3。我可以看到显示正确数据的 Excel 文件。
Edit2 上面子中的 Workbooks(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 Source:=obj.Range(DataRange)”在这种情况下在 2010 年不起作用但在 2003 年起作用。