我有一个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:**在另一例程中创建对象,并在该例程中弹出DataRange-
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 Source:= obj.Range(DataRange)"在2010年的情况下不起作用,而在2003年起作用。
3条答案
按热度按时间kcrjzv8t1#
不是100%认为下面的问题完全相同,但我有一种感觉,它很接近。
下面的内容对我来说似乎是个bug-为什么
ActiveChart
支持一个属性,而引用同一个图表的对象变量不支持该属性?5kgi1eie2#
不需要声明额外的变量,这样就可以很好地工作:
定义选项卡和范围的变量是预定义的常量和变量。您可以这样做:
但如果你的图表是动态的,它就不起作用了。
祝你好运
rqdpfwrv3#
除了上面的注解,这是您应该声明对象和使用它们的方式。
您可能还想查看THIS
这只是一个例子,请修改以适合你的需要。