2016-06-06 2 views
0

Я не могу найти способ изменения с помощью скрипта VBA языка в объектах SmartArt в Powerpoint 2013. Я видел PowerPoint 2007 - Set language on tables, charts etc that contains text, но он не работает для объектов SmartArt. Любая идея, как я мог это сделать? Большое спасибо.VBA Powerpoint 2013: изменить язык презентации, включая объекты SmartArt

ответ

0

Это code я, наконец, использовать для изменения языка, включая 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 
1

Вы должны получить доступ к Узлов (или GroupItems) объекта SmartArt, как это:

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 
+0

Как-то это не работает. Как вы пришли в TextFrame2 вместо TextFrame для обычных фигур? Нужно ли мне проходить через узлы? Я отправлю свой код позже. –

+0

Странно. Он работал в моей тестовой палубе. Я использую TextFrame2 (и TextRange2 и различные другие API V2), поскольку они добавляют больше свойств объектам с Office 2007, и поскольку вы упомянули, что используете 2013 год, имеет смысл использовать новейший API. Да, вам нужно пройти через узлы в соответствии с приведенным выше примером. –

+0

Ваш код заменяет только корневые узлы, а не дочерние узлы ниже первого. Замена для каждого входа oNode .Nodes для каждого входа oNode In .AllNodes. :-) –

Смежные вопросы