Word (VBA)

Word VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Word 2010)
文書比較結果に比較した文書を追加
投稿日時: 20/07/15 21:37:47
投稿者: Trackyqwer

お世話になっております。
 
文書比較結果に比較した文書を追加しようと下記コードを作ったのですが、
比較した文書は”結果の比較 1”には追加されず、マクロ実行用の文書に
追加されます。
文書比較結果に追加する方法を教えてください。
 
------------------------
Public Sub CompDocs()
'参照先 http://www.fingeneersblog.com/1141/
     
    '--- Wordのアプリケーションオブジェクト ---'
    Dim objWord As Word.Application
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
     
    '--- 比較対象のドキュメントオブジェクト1 ---'
    Dim objDoc_Org As Word.Document
    Set objDoc_Org = objWord.Documents.Open("D:\21 Macro\NewOld2\old.docx")
     
    '--- 比較対象のドキュメントオブジェクト2 ---'
    Dim objDoc_Rev As Word.Document
    Set objDoc_Rev = objWord.Documents.Open("D:\21 Macro\NewOld2\new.docx")
     
    '--- 文書を比較して比較結果のドキュメントオブジェクトを格納する ---'
    Dim objDoc_Cmp As Word.Document
    Set objDoc_Cmp = objWord.CompareDocuments(objDoc_Org, objDoc_Rev)
 
    '--- 比較対象のドキュメントに新旧の文書追加 ---'
    objDoc_Cmp.Select
    With Selection
      '.InsertBreak wdPageBreak
      .InsertFile "D:\21 Macro\NewOld2\new.docx"
      .InsertBreak wdPageBreak
      .InsertFile "D:\21 Macro\NewOld2\old.docx"
      '.InsertBreak wdSectionBreakNextPage
      .Collapse wdCollapseEnd
    End With
     
    Call objDoc_Org.Close(savechanges:=False)
    Call objDoc_Rev.Close(savechanges:=False)
     
    '--- ワードを閉じる ---'
    Call objWord.Quit
     
End Sub
------------------------
よろしくお願いします。

回答
投稿日時: 20/07/16 10:35:00
投稿者: sk

引用:
文書比較結果に比較した文書を追加しようと下記コードを作ったのですが、
比較した文書は”結果の比較 1”には追加されず、マクロ実行用の文書に
追加されます

引用:
Dim objWord As Word.Application
Set objWord = CreateObject("Word.Application")

ここで objWord に渡されているのは、そのマクロ有効文書が
開かれている Word.Application オブジェクトとは
別のインスタンスへの参照です。
 
引用:
With Selection

ここでの Selection プロパティは、objWord が参照している
Word.Application オブジェクトの Selection プロパティではなく、
そのマクロ有効文書が開かれている Word.Application オブジェクトの
Selection プロパティです。
 
つまり、先に起動していた Word アプリケーション上において
そのマクロ有効文書がアクティブになっているのであれば、
ここでの Selection プロパティによって返されるのは
そのマクロ有効文書における選択範囲( Word.Selection オブジェクト)
ということになり、その InsertFile, InsertBreak, Collapse などの
メソッドによってそのマクロ有効文書自身が編集されることになります。
 
・CreateObject によって生成されたインスタンスを参照するのではなく、
 実行中の Word.Application オブジェクトを参照するようにする。
 
・objWord の Selection プロパティであることを明示的に指定する。
 
・Selection プロパティに依存しないコードに変える。
 
以上のいずれかの対応を取ればよろしいでしょう。

投稿日時: 20/07/17 21:44:29
投稿者: Trackyqwer

skさん
 
ご返事ありがとうございます。
    With objDoc_Cmp.ActiveWindow.Selection
とすることでうまくいきました。