如何将Excel中的数据粘贴到PowerPoint中

时间:2018-01-11 15:07:35

标签: vba powerpoint-vba

我在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演示文稿

2 个答案:

答案 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