我在msdn.microsoft.com网站上看到了一些代码,但在尝试测试时遇到错误。这段代码就是他们的示例代码。代码如下:
Sub ReplaceText()
Dim oSld As Slide
Dim oShp As Shape
Dim oTxtRng As TextRange
Dim oTmpRng As TextRange
Set oSld = Application.ActivePresentation.Slides(1)
For Each oShp In oSld.Shapes
Set oTxtRng = oShp.TextFrame.TextRange
Set oTmpRng = oTxtRng.Replace(FindWhat:="Name Here", _
Replacewhat:="TESTTEST", WholeWords:=True)
Next oShp
End Sub
错误发生在Set oTxtRng = oShp.TextFrame.TextRange
行,错误是"指定的值超出范围"。任何人都知道我为什么会收到此错误,以及如何避免错误?这是在Powerpoint的VBA编辑器中,我打开了ppt演示文稿
答案 0 :(得分:1)
如果您已经打开了ppt,请不要创建,而是获取对象。而不是:
Set oPPTApp = CreateObject("PowerPoint.Application")
你应该
Set oPPTApp = GetObject(, "PowerPoint.Application")
然后,不要打开演示文稿,但要使用已经打开和激活的演示文稿:
Set oPPTFile = oPPTApp.ActivePresentation
如果它只有一张幻灯片,您可以使用以下代码访问其中的形状
Dim sh As PowerPoint.Shape
For Each sh In oPPTFile.Slides(1).Shapes
'do something with sh
Next sh
您正在寻找的属性可能是sh.TextFrame.TextRange.Text,但是使用Intellisense进行实验。
答案 1 :(得分:1)
某些形状没有文本框架(线条/连接器/ OLE对象等),因此您要先测试它。然后形状可能有一个文本框架但没有文本,所以你测试它。然后,您可以将文本范围分配给变量:
If oShp.HasTextFrame Then
If oShp.TextFrame.HasText Then
Set oTxtRng = oShp.TextFrame.TextRange
End If
End If