我是一位有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:
当调试器命中ActiveChart.SetSourceData Source:=objNBR.Range(DataRange)时,会出现错误消息,窗口如下图所示 -
在调试器中,DataRange是F2:R2,F3:R3,并且obj指向正确的Excel表单,如下图所示 -
ActiveChart来自一个模板,如下图所示 -
我的调试器显示“ActiveChart.ChartArea.Select”为true。ActiveChart和obj都是有效对象。
最重要的是,Excel 2003可以正常工作。我使用调试器比较了Excel 2003和2010的obj和ActiveChart,并且在代码方面没有发现太大的差异。我确实看到我的ActiveChart模板在2003年有点不同 -
原始模板与2010年显示的完全相同,但在复制到2003年的工作表中时,它被自动归零。这是我在2003年和2010年之间注意到的唯一差异。我不确定是否会导致此错误。
我不确定是否错过了任何证据。错误消息没有提供太多细节。是否有其他方法获取更多调试信息?
如果有人能帮助我找到问题并解决问题,我将不胜感激。
提前致谢
编辑1:obj是在另一个程序中创建的,并且DataRange在该程序中得到填充。
然后将数据插入到DataRange单元格中——F2:R2,F3:R3。我可以看到Excel文件显示了正确的数据。
编辑2:上面的子程序中的Workbooks(NewWorkBook)是由这些代码生成的,我可以看到新的带有图表的Excel显示在屏幕上。
我有一个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)时,会出现错误消息,窗口如下图所示 -
![enter image description here](https://istack.dev59.com/XkBNL.webp)
![enter image description here](https://istack.dev59.com/7NLJN.webp)
![enter image description here](https://istack.dev59.com/xAHnK.webp)
最重要的是,Excel 2003可以正常工作。我使用调试器比较了Excel 2003和2010的obj和ActiveChart,并且在代码方面没有发现太大的差异。我确实看到我的ActiveChart模板在2003年有点不同 -
![enter image description here](https://istack.dev59.com/BR6fr.webp)
我不确定是否错过了任何证据。错误消息没有提供太多细节。是否有其他方法获取更多调试信息?
如果有人能帮助我找到问题并解决问题,我将不胜感激。
提前致谢
编辑1:obj是在另一个程序中创建的,并且DataRange在该程序中得到填充。
Workbooks.Add
MyWorkbook = ActiveWorkbook.Name
Set obj = ActiveWorkbook.Worksheets(1)
然后将数据插入到DataRange单元格中——F2:R2,F3:R3。我可以看到Excel文件显示了正确的数据。
编辑2:上面的子程序中的Workbooks(NewWorkBook)是由这些代码生成的,我可以看到新的带有图表的Excel显示在屏幕上。
Windows(Dir(TemplateFile)).Activate
ActiveWorkbook.Sheets("C1").Select
ActiveWorkbook.Sheets("C1").Copy
NewWorkBook = ActiveWorkbook.Name
Windows(NewWorkBook).Visible = True
编辑3 使用Sid的方法首先声明对象,就像这样 -
使用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年可以。
obj
?什么是DataRange
?另外,您可能希望创建相关对象并与之一起工作,而不是使用 ActiveChart 或 Activesheet。 - Siddharth Rout