三流君のソースコード置き場

ブログにソースコードをアップして、ブログの検索機能で利用してます(利用予定です)

よく検索されるキーワード: [VBA]/ [VBS]/ [CreateObject]/ [Excel]/ [ADO]


PowerPoint VBAでOLE埋め込みWordの.OLEFormat.Activateを使ってルビを振る方法

PowerPoint VBAでOLE埋め込みWordにルビを振る方法

概要

PowerPointに埋め込まれたWord文書にルビを振るには、PowerPointとWordを連携させる必要があります。 このVBAマクロは、ExcelからPowerPointを操作し、スライド内のOLE型のWordオブジェクトにルビを振る処理を行います。 処理の流れは以下の通りです。

  1. 起動済みのPowerPointを取得
  2. PowerPoint内のスライドとシェイプをループ処理
  3. OLE型のWordオブジェクトを判別
  4. Wordアプリケーションオブジェクトを取得
  5. Word文書の全選択
  6. ルビダイアログを表示・ルビを振る

ソースコード

'Excelから開かれている既存のPowerPointを捕まえて
'埋め込まれている OLEオブジェクトのWord文章にルビを振る
'テスト
Sub ExcelからPP内のOLE型Wordにアクセスしてルビを振る()

    '起動済みのパワポを捕まえる
    Dim ppApp As Object
    
    Set ppApp = Nothing
    On Error Resume Next  'エラーが発生しても強引に次の命令に行け
    Set ppApp = GetObject(, "PowerPoint.Application")
    On Error GoTo 0  '忘れないで戻すぞ

    If ppApp Is Nothing Then
        MsgBox "OLEが埋まっているパワポを開いてから、再テストしてね"
        Exit Sub
    End If
    
    'データをセットする
    
    Dim p As Integer  'pp:スライドのページ
    
    Dim ppSlide As Object  'PowerPoint.Slide  'スライド
    Dim ppShape As Object  'PowerPoint.Shape  'シェイプ
    
    'プレゼンスライドのループ
    For p = 1 To ppApp.ActivePresentation.Slides.Count
        Set ppSlide = ppApp.ActivePresentation.Slides(p)
        
        ppSlide.Select 'スライドを選択
        DoEvents
        
        'スライド内のShapesのループ
        For Each ppShape In ppSlide.Shapes
            ppShape.Select
            DoEvents
            
            'msoEmbeddedOLEObject    7   埋め込み OLE オブジェクト
            If ppShape.Type = msoEmbeddedOLEObject Then  'OLEの埋め込みか?
                'さらに、フォーマットがDocumentか?聞く
                If TypeName(ppShape.OLEFormat.Object) = "Document" Then
                    Dim wdDocument As Object  'Word.Document
                    Set wdDocument = ppShape.OLEFormat.Object
                    
                    ppShape.OLEFormat.Activate  'アクティブにする(手動でダブルクリックした状態)
                    DoEvents
                    '親を見る、ppShape.OLEFormat.Parentはダメで、wdDocument.Parent?
                    'WordのDialogを実行テスト
                    Dim wdApp As Object   'Word.Application
                    Set wdApp = wdDocument.Parent  'DOC文章の親がWord.Application
                    wdApp.Selection.WholeStory  'Ctrl+A全選択
                    DoEvents
                    wdApp.Dialogs(986).Show 1   '986 wdDialogPhoneticGuide
                    DoEvents
                End If
            End If
        Next

    Next p
    
    ppApp.ActivePresentation.Slides(1).Select '先頭のスライドを選択
    DoEvents
    
    MsgBox "セット終了、ファイルを確認してください", vbExclamation

End Sub

ソースコードの説明

まず、起動済みのPowerPointアプリケーションオブジェクトを取得します。12:46 GetObjectでPowerPointを取得PowerPointが起動していない場合は、エラーが発生するので、エラー処理を追加し、メッセージを表示してマクロを終了するようにしています。

次に、スライドとシェイプをループ処理します。12:59 スライドとシェイプをループ処理ppSlideオブジェクトにスライドオブジェクトを、ppShapeオブジェクトにシェイプオブジェクトを格納し、各シェイプに対して処理を行います。

シェイプが埋め込みOLEオブジェクトかどうかをppShape.Type = msoEmbeddedOLEObjectで確認します。07:03 .Typeでシェイプの種類を確認 msoEmbeddedOLEObjectは埋め込みOLEオブジェクトを表す定数です。さらに、TypeName(ppShape.OLEFormat.Object) = "Document"で、埋め込まれたオブジェクトがWord文書かどうかを確認します。08:31 TypeNameでOLEオブジェクトの種類を確認

Word文書オブジェクトが見つかったら、ppShape.OLEFormat.ActivateでWord文書をアクティブ化します。14:42 OLEFormat.Activateで編集状態に これは、Word文書をダブルクリックして編集状態にする操作と同じです。

次に、Wordアプリケーションオブジェクトを取得します。17:51 親オブジェクト(.Parent)を探索 wdDocument.ParentでWordアプリケーションオブジェクトを取得できます。

取得したWordアプリケーションオブジェクトを使って、wdApp.Selection.WholeStoryでWord文書の全選択、wdApp.Dialogs(986).Show 1でルビダイアログを表示し、ルビを振ります。23:30 Wordのダイアログ起動方法を調べる wdDialogPhoneticGuideはルビダイアログを表す定数で、値は986です。

最後に、DoEventsで処理を一時停止し、PowerPointの最初のスライドを選択します。

a) この動画で説明したこと、伝えたかったこと

Excel VBAからPowerPointを操作し、スライド内の埋め込みWord文書にルビを振る方法を解説しました。OLEオブジェクトの操作、親オブジェクトの取得方法、Wordダイアログの起動など、VBAプログラミングのポイントを説明しました。

b) このソースコードで未解決の問題点、積み残しの課題

動画内でも説明した通り、このマクロは処理が重いため、大量のスライドやWord文書を処理する際に、パフォーマンスが低下する可能性があります。また、ルビを振った後の文字サイズのずれの修正も課題として残っています。今後の課題として、これらの問題点の改善策を検討していきたいと思います。

次に動画全体の埋め込みリンク

この動画では、PowerPoint VBAでOLE型の埋め込みWord文書にルビを振る方法を解説しています。Excel VBAからPowerPointを操作し、Word文書にルビを振るマクロのソースコードと解説、実行結果を紹介しています。

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)


Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。

三流解説動画の再生リスト
https://www.youtube.com/user/ken3video/playlists

[連絡先はココのフォームから]←連絡先の入力フォームです、気軽に書いてください
本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)