如何在ActiveWorkbook.Sheets()中使用传递的变量时克服运行时错误9?

时间:2015-08-12 17:42:14

标签: excel vba

我在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

非常感谢任何和所有帮助。

1 个答案:

答案 0 :(得分:0)

传递给参数的字符串确实是我的excel文件中的工作表和图表的名称。

你确定吗?

名为“图表3”的工作表是否具有名为“图表”的图表对象。 (选择图表时,图表名称显示在公式栏左侧的工具栏上)。图表通常被命名为“图表1”,“图表2”,除非您更改它们!

还要在问题行上添加断点,并在即时窗口中检查活动工作簿! debug.print Activeworkbook.name

你的代码看起来不错 ħ