2011-01-19 6 views
5

このマクロでは、基本的にPowerPointの各スライドをスキャンし、指定された言語を設定します。よく働く。 Howerverは、テキストボックスではないコンテナをスキップします。私はテーブル、スマート、チャートなどにその言語を適用したいと思います。PowerPoint 2007 - テキストを含む表やグラフなどの言語を設定する

これも可能ですか?これは現在のコードです:

答えて

7

ええ、それはPowerPointで直感的なものではありませんが、それはできます。基本的には、3つの主要なタイプのシェイプ(シンプル、グループ化、テーブル)があります。このコードはすべてをチェックします:

Public Sub changeLanguage() 
    On Error Resume Next 
    Dim gi As GroupShapes '<-this was added. used below 
    'lang = "English" 
    lang = "Norwegian" 
    'Determine language selected 
    If lang = "English" Then 
     lang = msoLanguageIDEnglishUK 
    ElseIf lang = "Norwegian" Then 
     lang = msoLanguageIDNorwegianBokmol 
    End If 
    'Set default language in application 
    ActivePresentation.DefaultLanguageID = lang 

    'Set language in each textbox in each slide 
    For Each oSlide In ActivePresentation.Slides 
     Dim oShape As Shape 
     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 
      Else 
       Set gi = oShape.GroupItems 
       'Check if it is a group of shapes 
       If Not gi Is Nothing Then 
        If oShape.GroupItems.Count > 0 Then 
         For i = 0 To oShape.GroupItems.Count - 1 
          oShape.GroupItems(i).TextFrame.TextRange.LanguageID = lang 
         Next 
        End If 
       'it's none of the above, it's just a simple shape, change the language ID 
       Else 
        oShape.TextFrame.TextRange.LanguageID = lang 
       End If 
      End If 
     Next 
    Next 
End Sub 
+0

それはかなりうまく動作します!しかし、それはSmartArtをチェックしていないようです。これは可能ですか?マイクロソフトでは2007年版にマクロ記録を含めるべきだったので、SmartArtオブジェクトをクリックして記録することができた。 –

+0

私の側ではSmartArtをチェックしますが、PowerPoint 2010でテストしました.2007年でも、SmartArtは 'oShape.GroupItems 'とみなされます。 SmartArtで別のデッキでテストしようとすると、同じ結果が得られますか? –

+0

@Kenny Bones:別のデッキでこれを試すことができましたか? –

0

すべてのシェイプで言語を変更するマクロを実行するときに同じ問題が発生しました。 私が知った限り、PPT2007では、ChartsやSmartArtなどのオブジェクトにプログラムで言語を設定することはできません。これらのオブジェクトのVBAにlanguageIDを設定するアクセス権はありません。ただし、SmartArtオブジェクトまたはChartオブジェクトをクリックして言語を変更すると機能します。他のオブジェクトの

  • グループ化されたアイテム - I言語
  • テーブルを設定するグループ内のすべてのオブジェクトを介して(オタクのポストの例でのように)プログラム的に横断しなければならなかった - 私はすべてを横断細胞。
0

https://superuser.com/questions/432366/how-do-i-change-the-language-of-all-powerpoint-slides-at-onceから少し時間が経ちましたがここに来ましたが。私のpythonでの作業を好むので、win32comパッケージを使用してPythonのバージョンは次のようになります。

infile_name = 'drive:/path/to/in.pptx' 
outfile_name = 'drive:/path/to/out.pptx' 

target_language = 1031 # find in language list, here German 

import time 
import win32com.client 


ppt = win32com.client.Dispatch('PowerPoint.Application') 
ppt.Visible = True 

presentation = ppt.Presentations.Open(infile_name) 

def change_all_subshapes(target_shape, language_id): 
    if target_shape.HasTextFrame: 
     target_shape.TextFrame.TextRange.languageID = language_id 

    if target_shape.HasTable: 
     for r in range(1, target_shape.Table.Rows.Count + 1): 
      for c in range(1, target_shape.Table.Columns.Count + 1): 
       target_shape.Table.Cell(r, c).Shape.TextFrame.TextRange.LanguageID = language_id 

    # look the constants msoGroup and msoSmartArt up 
    if target_shape.Type in [6, 24]: 
     for i in range(1, target_shape.GroupItems.Count + 1): 
      change_all_subshapes(target_shape.GroupItems.Item(i), language_id) 

# necessary: hopefully ppt is open after a second 
time.sleep(1) 

print('all slides') 
for i in range(1, presentation.Slides.Count + 1): 
    for j in range(1, presentation.Slides(i).Shapes.Count + 1): 
     change_all_subshapes(presentation.Slides(i).Shapes(j), target_language) 

print('master shapes') 
for i in range(1, presentation.SlideMaster.CustomLayouts.Count + 1): 
    for j in range(1, presentation.SlideMaster.CustomLayouts(i).Shapes.Count + 1): 
     change_all_subshapes(presentation.SlideMaster.CustomLayouts(i).Shapes(j), target_language) 

presentation.SaveAs(outfile_name) 
presentation.Close() 
ppt.Quit() 
関連する問題