VBA for Microsoft PowerPoint,用于识别和隐藏德语文本框



我需要用相同的幻灯片、背景和除文本之外的所有内容做两个演示:一个用德语,一个用英语。因此,我有两个单独的演示文稿,我必须始终同时更新,否则一个语言版本将过时,我经常忘记我更改了什么。

我制作了一个自定义演示,将所有幻灯片复制到一个PowerPoint演示文稿中,效果相当好,但每次编辑为一种语言时,我仍然必须更改两张相同的幻灯片。

因此,我正在尝试编写一个宏,该宏将识别演示文稿中所有包含德语文本的文本框,并在演示期间隐藏它们,反之亦然。然后,每个宏都将链接到标题幻灯片上一个名为"英语"或"德语"的超链接框,单击该框时,将隐藏其他语言的文本框,同时保持所有图片和格式不变。理想情况下,宏将隐藏一种语言中的所有框,并在同一步骤中再次显示另一种语言的所有框。这样演示文稿就始终可用,而且我没有用户打开"没有文本框"的PPT,因为它们都会被隐藏。。。

为了实现这一点,我在同一张幻灯片上有两个文本框,其中包含两种语言的文本,这就是为什么我想隐藏文本框。

我可以隐藏所有文本框,但不能隐藏特定语言的文本框(也就是说,所有框,无论其编辑语言如何,都会被隐藏,但不会隐藏任何特定的框)。

PS-此处不需要引用文本框。。。它可能只是指一种形状。我试图避免图片被隐藏,并认为文本框是引用我想要的内容的最佳方式。

有更好的方法吗?

我真的不知道如何在VBA中引用一种语言,我偶然发现了这个网站,并认为有人可能有一个快速的技巧来帮助我解决这个问题。我的代码将混合出文本框,但不会混合出特定的语言框,如下所示:

Sub GermanTextBoxFinder()
Dim SlideToCheck As Slide
Dim ShapeIndex As Integer
' Visit each slide
For Each SlideToCheck In ActivePresentation.Slides
' On each slide, count down through the shapes
For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
' If the shape IS a text box and DOES have German text
If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox And _
MsoLanguageID.msoLanguageIDGerman _
Then
' Toggle visibility of German Textboxes
SlideToCheck.Shapes(ShapeIndex).Visible = msoFalse
End If
Next
Next
End Sub

为什么不用德语文本命名形状?例如,德语文本使用"txtGER"前缀,英语文本使用"txtENG"前缀。然后你可以使用以下内容:

If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox And _
Left(SlideToCheck.Shapes(ShapeIndex).Name, 6) = "txtGER" Then
' Toggle visibility of German Textboxes
SlideToCheck.Shapes(ShapeIndex).Visible = msoFalse
Else
SlideToCheck.Shapes(ShapeIndex).Visible = msoTrue
End If

(有关如何重命名形状的信息,请参阅此q+a)。

这将隐藏包含英文或法文文本的文本框/形状。您可以修改HideFrench以隐藏德语。。。Intellisense将提供正确的常量。

Sub HideEnglish()
Dim oSl As Slide
Dim oSh As Shape
For Each oSl In ActivePresentation.Slides
For Each oSh In oSl.Shapes
If oSh.HasTextFrame Then
If oSh.TextFrame.HasText Then
If oSh.TextFrame.TextRange.LanguageID = msoLanguageIDEnglishUS Then
oSh.Visible = False
Else
oSh.Visible = True
End If
End If
End If
Next
Next
End Sub
Sub HideFrench()
Dim oSl As Slide
Dim oSh As Shape
For Each oSl In ActivePresentation.Slides
For Each oSh In oSl.Shapes
If oSh.HasTextFrame Then
If oSh.TextFrame.HasText Then
If oSh.TextFrame.TextRange.LanguageID = msoLanguageIDFrench Then
oSh.Visible = False
Else
oSh.Visible = True
End If
End If
End If
Next
Next
End Sub

最新更新