Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba PPT=使用节名_Vba_Powerpoint - Fatal编程技术网

Vba PPT=使用节名

Vba PPT=使用节名,vba,powerpoint,Vba,Powerpoint,是否有办法在(每张)幻灯片的文本框中显示节名,以便与观众交流? 如图所示: 但是我不能使用页脚,因为它已经在其他地方使用过了 编辑:@Steve Rindsberg-非常感谢您的回答。 (很抱歉出错。我是VBA的初学者(从两周开始,但要花很多时间…。 这是我的代码:首先,我尝试了以下方法: 我在SlideMaster.CustomLayout中添加了一个文本框作为占位符,文本为“Section.#” 然后我将这个占位符/文本框复制到一些相关的自定义布局中。 接下来,我添加了一些带有这些自定义布局

是否有办法在(每张)幻灯片的文本框中显示节名,以便与观众交流? 如图所示: 但是我不能使用页脚,因为它已经在其他地方使用过了

编辑:@Steve Rindsberg-非常感谢您的回答。
(很抱歉出错。我是VBA的初学者(从两周开始,但要花很多时间…。
这是我的代码:首先,我尝试了以下方法:
我在SlideMaster.CustomLayout中添加了一个文本框作为占位符,文本为“Section.#”

然后我将这个占位符/文本框复制到一些相关的自定义布局中。 接下来,我添加了一些带有这些自定义布局之一的幻灯片(在slideView中)。因此,我在一些幻灯片上有这个占位符/文本框

下一步:我在所有幻灯片中搜索文本“Section#”,并用标签“text”标记这些占位符,值为“Section#”:

但是幻灯片上的占位符不接受此标记

因此,我没有这样做,而是在一些相关幻灯片上直接设置文本框“Section#”,正如您所建议的那样,然后运行宏来标记文本框:
如上所述的“Sub-FindTextSelectionAndTag()”

最后,我创建了该宏,它将当前部分带到分类/标记文本框中

Sub AbschnittHeader()
  Dim sld As Slide
  Dim shp As Shape
  Dim b_found As Boolean
    If ActivePresentation.SectionProperties.Count > 0 Then
      For Each sld In ActivePresentation.Slides
      For Each shp In sld.Shapes
  If shp.Tags("TEXT") = "Section#" Then _
  shp.TextFrame.TextRange = 
 ActivePresentation.SectionProperties.name(sld.sectionIndex)
     Next shp
   Next sld
 End If
End Sub
到目前为止,这是可行的

我会要求对代码进行可能的优化-我有一个问题,在Master Slide.customlayout上添加占位符有什么错。有什么方法可以让它工作吗?因为我认为这种方法会更舒适。或者,这是不可能的

我还想在文本框的部分添加PowerPoint文件(ActivePresentation)的名称,如下所示(但我不知道如何添加):

powerpoint文件名称| sld.sectionIndex

例如(PPT文件名称:营销):
营销|第1章简介
营销|第2章


我非常感谢您的建议。

非常感谢。这是我的最终解决方案:
首先,如我的问题中所述,子AddTextboxToSlides(),但不是主幻灯片,而是多张幻灯片,然后子AbschnittHeader()可选,并带有以下行:

a、 包含在文件名中

For Each shp In sld.Shapes
  If shp.Tags("TEXT") = "Section#" Then _
    shp.TextFrame.TextRange = ActivePresentation.FullName _
    & " | " & ActivePresentation.SectionProperties.name(sld.sectionIndex)
b、 或包含在第一张幻灯片的“文件标题”中:-)


您发布的链接中的代码将提供每张幻灯片所属部分的名称。从这里开始,您所需要做的就是使用幻灯片的.Shapes.AddTextbox方法在您想要的任何位置添加文本框。然后,您可以将其格式化为taste,并将节名添加为textbox形状的.TextFrame.TextRange.Text属性。试试吧,把你的代码发回来,我们可以帮你解决任何问题。谢谢。我已经考虑了你的建议,发布了我的代码并编辑了我的问题。我想问你一个问题:为什么要在自定义布局中添加文本/占位符?是否有理由不在每张幻灯片中添加文本?有几张幻灯片不应出现该部分,例如源目录、目录。如果使用customlayouts很复杂,我也可以手动删除文本框。没问题。我只是觉得自定义布局会更容易,在这种情况下,我想我会使用一个特殊的自定义布局,并让代码跳过添加文本框到基于该布局的幻灯片。我肯定会继续标记您正在添加的形状,这样您也可以编写一个例程,搜索和删除具有相同标记的任何形状,以防以后需要删除或更新文本。
Sub AbschnittHeader()
  Dim sld As Slide
  Dim shp As Shape
  Dim b_found As Boolean
    If ActivePresentation.SectionProperties.Count > 0 Then
      For Each sld In ActivePresentation.Slides
      For Each shp In sld.Shapes
  If shp.Tags("TEXT") = "Section#" Then _
  shp.TextFrame.TextRange = 
 ActivePresentation.SectionProperties.name(sld.sectionIndex)
     Next shp
   Next sld
 End If
End Sub
For Each shp In sld.Shapes
  If shp.Tags("TEXT") = "Section#" Then _
    shp.TextFrame.TextRange = ActivePresentation.FullName _
    & " | " & ActivePresentation.SectionProperties.name(sld.sectionIndex)
For Each shp In sld.Shapes
  If shp.Tags("TEXT") = "Section#" Then _
    shp.TextFrame.TextRange = _
    ActivePresentation.Slides(1).Shapes.Title.TextFrame.TextRange.Text _
    & " | " & ActivePresentation.SectionProperties.name(sld.sectionIndex)