![]()
筆箱にVBAのカンニングペーパーを入れる係のみすくです。こんにちは。
Excel VBAでWordの文章を書き換えます。
Wordで完結する場合は、WordにVBAを実装すれば良いですが、
Excel側から操作したいときもあるよね。
Wordの文章の文字列の書き換えです。

↓

参照設定
ツール > 参照設定 >
Microsoft Word 16.0 Object Library
Option Explicit
Private wordApp As Word.Application
Private wordDoc As Word.Document
Private docPath As String
Private Sub Class_Initialize()
Set wordApp = New Word.Application
wordApp.Visible = True
End Sub
Private Sub Class_Terminate()
Set wordApp = Nothing
Set wordDoc = Nothing
End Sub
Public Sub init(ByVal path As String)
docPath = path
Set wordDoc = wordApp.Documents.Open(docPath)
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】置換
'【処理概要】文字列を置換する
'【引 数】ByVal target As String 対象文字列
' ByVal exp As String 置換後文字列
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Public Sub replace(ByVal target As String, ByVal exp As String)
With wordDoc.Content.Find
.Text = target
.Replacement.Text = exp
.Wrap = wdFindContinue '先頭/末尾に戻って検索を続ける
.MatchFuzzy = True '完全一致
.Execute replace:=wdReplaceAll '置換実行, すべて置換
End With
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】Wordドキュメント上書き保存
'【処理概要】Wordドキュメント上書き保存する
'【引 数】なし
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Public Sub save()
wordDoc.save
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】Wordドキュメントを名前を付けて保存
'【処理概要】Wordドキュメントを名前を付けて保存する
'【引 数】保存先フルパス
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Public Sub saveAs(ByVal path As String)
wordDoc.SaveAs2 Filename:=path
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】Wordドキュメントクローズ
'【処理概要】Wordドキュメントを閉じる
'【引 数】なし
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Public Sub closeDoc()
wordDoc.Close savechanges:=False
wordApp.Quit
End Sub
Public Sub test()
Dim wd As ClsWordCtrl
Set wd = New ClsWordCtrl
Call wd.init("D:\dev\ExcelVBA\test.docx")
Call wd.replace("{2}", "書き換える")
Call wd.save
Call wd.saveAs("D:\dev\ExcelVBA\test2.docx")
Call wd.closeDoc
Set wd = Nothing
End Sub