W.I.S. Laboratory
menu-bar

Excel 2013


Excel 2013 のVBAで Word を操作して置換しようとするとエラーで止まる

エクセルのVBAからワードの文書を開いて全置換作業をする場合、2010までは出来ていたのに2013で同じコードを走らせるとエラーで止まってしまうことがある。
これは2013から「閲覧モード」が追加され、このモードでは編集がまったく出来ないので置換動作のところでエラーになるため。
編集モードへ移行する1行を加えることで置換が可能になる。

例えば、以下のようなVBAコードがあったとして、このままではエラーで止まる場合・・
Private Sub repl()
Dim wdObj As New Word.Application ' Wordを起動する
Dim wdDoc As Word.Document
Dim wordFile As String
Dim objSelect As Object

wordFile = "ワード文書.docx" ' ワード文書のファイル名

wdObj.Visible = True ' Wordを表示する(そのままだと起動はしているが画面には表示されない)
AppActivate wdObj ' Wordをアクティベートする(最前面に)

Set wdDoc = wdObj.Documents.Open(ThisWorkbook.Path & "\" & wordFile, ReadOnly:=True)
Set objSelect = wdObj.Selection

objSelect.Find.Text = "検索文字列"
objSelect.Find.Forward = True
objSelect.Find.Replacement.Text = "置換文字列"
objSelect.Find.Execute Replace:=wdReplaceAll ' ←ここで止まってしまう
End Sub

下のように wdDoc.ActiveWindow.View = wdPrintView を追加することで動くようになる。
Private Sub repl()
Dim wdObj As New Word.Application ' Wordを起動する
Dim wdDoc As Word.Document
Dim wordFile As String
Dim objSelect As Object

wordFile = "ワード文書.docx" ' ワード文書のファイル名

wdObj.Visible = True ' Wordを表示する(そのままだと起動はしているが画面には表示されない)
AppActivate wdObj ' Wordをアクティベートする(最前面に)

Set wdDoc = wdObj.Documents.Open(ThisWorkbook.Path & "\" & wordFile, ReadOnly:=True)
Set objSelect = wdObj.Selection
wdDoc.ActiveWindow.View = wdPrintView ' 編集モードに移行(閲覧モードでは置換ができない)

objSelect.Find.Text = "検索文字列"
objSelect.Find.Forward = True
objSelect.Find.Replacement.Text = "置換文字列"
objSelect.Find.Execute Replace:=wdReplaceAll
End Sub

[ 戻る ]
saluteweb