powerpoint vba获取形状的默认文本

时间:2016-04-18 02:53:31

标签: vba powerpoint powerpoint-vba

我的PowerPoint幻灯片中有一个文本框,其中包含默认文本,例如"个人资料描述"当你点击它时,单词" Profile Description"消失,所以你可以输入个人资料。

我想通过查看框中的内容找到特定的文本框,即包含默认文本"个人资料描述"的文本框(我可以'使用标题,因为标题可能会有所不同,具体取决于它的滑动)。

我可以通过使用Slide.TextFrame.TextRange找到此文本的许多其他属性,但我无法弄清楚如何获取该默认文本。

一旦我在框中单击并键入一些文本,然后我可以使用Slide.TextFrame.TextRange.Text访问新值,但我需要默认文本。我看了很多文档,但我想我在某个地方错过了它。请指出我正确的方向。谢谢。

2 个答案:

答案 0 :(得分:1)

是否从占位符创建了该文本框?如果是这样,您需要查看与幻灯片关联的自定义布局上的父占位符,由于幻灯片和布局之间的集合索引的差异以及每次更改Name属性这一事实,这并非易事幻灯片是从主人生成的。例如:

oSld.CustomLayout.Shapes.Placeholders(index).TextFrame2.TextRange.Text

请注意,这适用于自定义文本占位符,但不适用于内置占位符,其中自定义布局上的文本由幻灯片上的PowerPoint动态替换。

示例:

幻灯片母版/版面/标题占位符:"点击编辑主标题样式"

幻灯片占位符:"点击添加标题"

您可以使用标记来获取布局上的形状参考。标签是一些不可见的元数据,您可以将其添加到演示文稿,幻灯片或形状中。

这是向幻灯片上的形状添加标签的方法:

ActivePresentation.Slides(1).Shapes(1).Tags.Add myName, myValue

然后你编写一个函数来按照它的标签返回一个形状:

' *************************************************************************************
' Purpose : Returns a presentation, slide or shape by its tag from a collection of
'           presentations, slides or shapes
' Author  : Jamie Garroch of YOUpresent.co.uk
' Inputs  : TagObject - collection type to be searched. Presentations, Slides or Shapes
'           TagName - The tag name to search for (always upper case)
'           TagValue - The tag value to search for
' Outputs : Returns a Presentation, Slide or Shape object if a match is found
' *************************************************************************************
Public Function GetByTag(TagObject, TagName As String, TagValue As String) As Object
  On Error GoTo errhandler
  Select Case True
    Case TypeOf TagObject Is Presentations
      Dim oPres As Presentation
      For Each oPres In TagObject
        If TagExists(oPres, TagName, TagValue, True) Then Set GetByTag = oPres: Exit Function
      Next
    Case TypeOf TagObject Is Slides
      Dim oSld As Slide
      For Each oSld In TagObject
        If TagExists(oSld, TagName, TagValue, True) Then Set GetByTag = oSld: Exit Function
      Next
    Case TypeOf TagObject Is Shapes
      Dim oShp As Shape
      For Each oShp In TagObject
        If TagExists(oShp, TagName, TagValue, True) Then Set GetByTag = oShp: Exit Function
      Next
  End Select
Exit Function

errhandler:       DebugMsg" GetByTag错误:" &安培; Err& " " &安培; Err.Description     结束功能

答案 1 :(得分:1)

我一直在尝试找到一种方法来使Tags使用,但不能。

相反,我的解决方案是预先检查占位符的CustomLayout并注意顶部的x,y坐标以及它们默认应具有的值。

在生成页面之后,我通过x,y坐标查看形状,如果匹配,则替换默认值。