我继承了一些使用三个全局变量的代码
Global PPTApp As PowerPoint.Application
Global PPTPres As PowerPoint.Presentation
Global PPtSlides As PowerPoint.Slide
稍后在代码中,它以以下方式使用它们。
Sub PasteTablesPPT(TargetText As String, PPTRange As Range)
Dim TargetSlide As PowerPoint.Slide
PPTApp.Activate
For Each PPtSlides In PPTPres.Slides 'Error on colleagues PC
With PPtSlides.Shapes.Title.TextFrame
If .HasText Then
If UCase(.TextRange.Text) = UCase(TargetText) Then
TargetNum = CInt(PPtSlides.SlideIndex)
Exit For
End If
End If
End With
Next
在我的电脑上,这个程序可以正常工作,也就是它会启动PowerPoint应用程序,并循环遍历演示文稿中的每一张幻灯片。
然而,在我同事的电脑上,程序在我标记的那一行出现了错误。具体的错误是Error 451,我认为这与PPtSlides未被识别为PPtPres.Slides的一部分有关。在调试模式下,当我将鼠标悬停在PPtSlides上时,它显示为“Nothing”。
我们在VBA工具中检查了相同的引用,有人能解释一下为什么这个程序在我的电脑上可以工作,但在我同事的电脑上不行吗?
编辑: PPTPres被定义的部分(在另一个子程序中,这只是该子程序的一部分)。
On Error GoTo ErrHandler
Set PPTApp = GetObject(class:="PowerPoint.Application")
PPTApp.Visible = msoTrue
Set PPTPres = PPTApp.Presentations("Testing File")
Exit Sub
PPtSlides
的值,则正常情况下它不会显示任何内容,因为该行尚未执行。但是,您能否添加定义PPTPres
的部分? 它很可能来自那里。还有一点需要注意的是,为了遵守惯例,最好将PPtSlides
更改为PPtSlide
,因为它只是单个幻灯片而不是集合。 - R3uK