0

我找不到通过 VBA 脚本更改 Powerpoint 2013 中 SmartArt 对象中的语言的方法。我看过PowerPoint 2007 - 在包含文本的表格、图表等上设置语言,但它不适用于 SmartArt 对象。知道我该怎么做吗?非常感谢。

4

2 回答 2

1

您需要像这样访问 SmartArt 对象的节点(或 GroupItems):

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
于 2016-06-06T12:37:19.737 回答
1

这是我最终用来更改包括 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
于 2016-06-27T11:56:42.977 回答