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

Vba 如何将Excel中的数据粘贴到PowerPoint中,vba,powerpoint,Vba,Powerpoint,我在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

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

如果您已经打开了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进行实验

如果您已经打开了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进行实验

有些形状没有文本框(线/连接器/OLE对象等),所以您需要先测试一下。然后这个形状可能有一个文本框,但里面没有文本,所以你要测试一下。然后您可以将textrange分配给变量:

If oShp.HasTextFrame Then
  If oShp.TextFrame.HasText Then
    Set oTxtRng = oShp.TextFrame.TextRange
  End If
End If

有些形状没有文本框(线/连接器/OLE对象等),所以您需要先测试一下。然后这个形状可能有一个文本框,但里面没有文本,所以你要测试一下。然后您可以将textrange分配给变量:

If oShp.HasTextFrame Then
  If oShp.TextFrame.HasText Then
    Set oTxtRng = oShp.TextFrame.TextRange
  End If
End If

这看起来很有希望-这看起来很有希望-嘿,我真的很感谢你的回答。我想这绝对是我要找的房产。然而,我在尝试测试时遇到了一个错误。我编辑了上面的问题,以显示我在说什么。如果你对正在发生的事情有任何见解,那将是理想的。谢谢我猜你有一些没有文字的形状。如果oShp.TextFrame.HasText然后。。。结束,如果排除没有文字的形状,如徽标或图表。嘿,我真的很感谢你的回答。我想这绝对是我要找的房产。然而,我在尝试测试时遇到了一个错误。我编辑了上面的问题,以显示我在说什么。如果你对正在发生的事情有任何见解,那将是理想的。谢谢我猜你有一些没有文字的形状。如果oShp.TextFrame.HasText然后。。。如果要排除没有文字的形状,如徽标或图表,请结束。谢谢Steve!事实上,我是自己想出来的,但我想有答案是很好的。也许我应该“回答我自己的问题”。谢谢史蒂夫!事实上,我是自己想出来的,但我想有答案是很好的。也许我应该“回答我自己的问题”。