我在Excel VBA,2007中编写代码,将特定的图表和表格复制到特定的幻灯片和特定的占位符中。我已经制定了工作代码来执行此操作,但是阅读和理解正在发生的事情很长很难。为此,我决定编写一个子程序来处理工作负载的冲击并减少我的代码量。我在传递参数时遇到了一些语法错误,但现在我遇到了一个我无法理解的问题。我在参考下面的代码行时遇到运行时错误9。
ActiveWorkbook.Sheets(oSheet).ChartObjects(oChart).CopyPicture
这行代码在旧程序中运行得很好,没有传递给它的变量。我根据我的一些信息尝试了几种不同的方法来攻击问题,例如将变量括在引号中,在变量的末尾添加'.Value',并且我在开始时也在ByVal和ByRef之间切换的代码。我还通过单步执行代码并观察Locals窗口,验证参数是否正确传递给Sub CopyChart。另外,传递给参数的字符串确实是我的excel文件中的工作表和图表的名称。以下是我正在使用的代码的缩短版本。
Private nPlcHolder As Integer
Private PPApp As PowerPoint.Application
Private PPPres As PowerPoint.Presentation
Private PPSlide As PowerPoint.Slide
Private x As Integer
Private oSheet As String
Private oChart As String
Public Sub CopyChart(ByRef x As Integer, ByRef y As Integer, ByRef oSheet As String, ByRef oChart As String)
'x is slide number(count zero as 1), y as placeholder number
ActiveWorkbook.Sheets(oSheet).ChartObjects(oChart).CopyPicture
PPPres.Slides(x).Select
With PPPres
nPlcHolder = y
.Slides(x).Shapes.Placeholders(nPlcHolder).Select msoTrue
.Windows(1).View.PasteSpecial (ppPasteMetafilePicture)
End With
End Sub
Sub ChartToPresentation()
' Uses Early Binding to the PowerPoint Object Model
' Reference existing instance of PowerPoint
Set PPApp = GetObject(, "Powerpoint.Application")
' Reference active presentation
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = ppViewSlide
Call CopyChart(6, 2, "Chart 3", "Charts")
Call CopyChart(7, 2, "Chart 1", "Charts")
' Clean up
Set PPSlide = Nothing
Set PPPres = Nothing
Set PPApp = Nothing
End Sub
非常感谢任何和所有帮助。
答案 0 :(得分:0)
传递给参数的字符串确实是我的excel文件中的工作表和图表的名称。
你确定吗?
名为“图表3”的工作表是否具有名为“图表”的图表对象。 (选择图表时,图表名称显示在公式栏左侧的工具栏上)。图表通常被命名为“图表1”,“图表2”,除非您更改它们!
还要在问题行上添加断点,并在即时窗口中检查活动工作簿! debug.print Activeworkbook.name
你的代码看起来不错 ħ