VBA Powerpoint 2013: change presentation language including SmartArt objects

こ雲淡風輕ζ 提交于 2019-12-08 10:13:55

问题


I can not find a way to change by VBA script the language in SmartArt objects in Powerpoint 2013. I've seen PowerPoint 2007 - Set language on tables, charts etc that contains text but it does not work for SmartArt objects. Any idea how I could do this? Many thanks.


回答1:


You need to access the Nodes (or GroupItems) of the SmartArt object like this:

Sub SwitchSmartArtLanguage(oSA As SmartArt)
  Dim oNode As SmartArtNode
  With oSA
    For Each oNode In .Nodes
      oNode.TextFrame2.TextRange.LanguageID = msoLanguageIDEnglishUK
    Next
  End With
End Sub



回答2:


This is the code I finally use to change the language including SmartArts:

Sub SetLangUS()
  Call changeLanguage(ActivePresentation, "US")
End Sub

Sub SetLangDE()
  Call changeLanguage(ActivePresentation, "DE")
End Sub



Private Function changeLanguage(oPres As Presentation, langStr As String)
' Reference http://stackoverflow.com/questions/4735765/powerpoint-2007-set-language-on-tables-charts-etc-that-contains-text
' https://support.microsoft.com/en-us/kb/245468

    On Error Resume Next

    Dim r, c As Integer
    Dim oSlide As Slide
    Dim oNode As SmartArtNode
    Dim oShape, oNodeShape As Shape
    Dim lang As String

    'lang = "Norwegian"
    'Determine language selected
    If langStr = "US" Then
        lang = msoLanguageIDEnglishUS
    ElseIf langStr = "UK" Then
        lang = msoLanguageIDEnglishUK
    ElseIf langStr = "DE" Then
        lang = msoLanguageIDGerman
    ElseIf langStr = "FR" Then
        lang = msoLanguageIDFrench
    End If

    'Set default language in application
    oPres.DefaultLanguageID = lang

    'Set language in each textbox in each slide
    For Each oSlide In oPres.Slides
        For Each oShape In oSlide.Shapes
            'Check first if it is a table
            If oShape.HasTable Then
                For r = 1 To oShape.Table.Rows.Count
                    For c = 1 To oShape.Table.Columns.Count
                        oShape.Table.Cell(r, c).Shape.TextFrame.TextRange.LanguageID = lang
                    Next
                Next
            ElseIf oShape.HasSmartArt Then
                For Each oNode In oShape.SmartArt.AllNodes
                    oNode.TextFrame2.TextRange.LanguageID = lang
                Next
            Else
                oShape.TextFrame.TextRange.LanguageID = lang

                    For c = 0 To oShape.GroupItems.Count - 1
                        oShape.GroupItems(c).TextFrame.TextRange.LanguageID = lang
                    Next

            End If
        Next
    Next

    ' Update Masters
    For Each oShape In oPres.SlideMaster.Shapes
        oShape.TextFrame.TextRange.LanguageID = lang
    Next

    For Each oShape In oPres.TitleMaster.Shapes
        oShape.TextFrame.TextRange.LanguageID = lang
    Next

    For Each oShape In oPres.NotesMaster.Shapes
        oShape.TextFrame.TextRange.LanguageID = lang
    Next

    ' MsgBox
    MsgBox "Presentation Language was changed to " & langStr & ".", vbOKOnly, "SetLanguage"


End Function


来源:https://stackoverflow.com/questions/37653183/vba-powerpoint-2013-change-presentation-language-including-smartart-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!