首页 文章

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

提问于
浏览
0

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

我已经制作了一个自定义节目,所有幻灯片都复制到一个PowerPoint演示文稿中,效果相当不错,但每次我编辑一种语言时,我仍然必须更改两个相同的幻灯片 .

因此,我正在尝试编写一个宏,它将识别演示文稿中的所有文本框,并在其中显示德语文本并在演出期间隐藏它们,反之亦然 . 然后,每个宏都将链接到 Headers 幻灯片上的一个名为“英语”或“德语”的超链接框,当单击该框时,它将隐藏其他语言的文本框,同时保留所有图片和格式相同 . 理想情况下,宏会隐藏一种语言中的所有框,并在同一步骤中再次显示另一种语言中的所有框,以便演示文稿始终可用,并且我没有用户打开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

2 回答

  • 0

    为什么不用带有德语文字的形状来命名这些形状?例如 . 对于德语文本使用前缀“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
    

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

  • 0

    这将隐藏包含英语或法语的文本框/形状 . 您可以修改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
    

相关问题