excel のvbaで microsoft word の複数の既存文書内の任意の場所で特定の文字を検索し、その文字の1行下に任意の文字を挿入する方法を検討しています。
まずは下記のような方法で、文字列を検索し、置換する方法を考えたのですが、これだと置換前の文字(下記の例でいうplaceholder)が置換後に置き換わるため、次にまた別の文字に変換する際に出来なくなります。
Sub Macro1()
'
' Macro1 Macro
'
'
Dim n As Integer
'先頭にカーソル移動 https://www.relief.jp/docs/word-vba-selecting-start-documents.html
から引用
ActiveDocument.Bookmarks("\StartOfDoc").Select
'文字列を探す、ターゲット位置決め
Selection.Find.Execute FindText:="バグ内容", Forward:=True
'見つけた↑下の行に移動 ↑でFindTextが見つからなかった時の処理が入ってないや
n = Selection.Move(Unit:=wdLine, Count:=1) 'wdLineで行単位移動
'文字列を挿入
Options.ReplaceSelection = False 'trueで置き換え
Selection.TypeText Text:="word vbaにはまる"
Selection.TypeParagraph 'エンターキー 改行
End Sub
'>wordの範囲をして、excelのoffsetのようなことが出来たらいいのですが....
' https://youtu.be/rtdwyl2Bbic?t=974 ← word知らないおっさんが探ってみました
'段落から探ると良いのでは?
'検索キーワード VBA Word 段落 など
Sub test()
Dim n As Integer
'全ての段落をテスト表示
For n = 1 To ActiveDocument.Paragraphs.Count
Debug.Print n & ":" & ActiveDocument.Paragraphs(n).Range.Text
Next n
End Sub
'段落を一つ一つn番目で探り、InStrでターゲットを判断して、
'n + 1 の段落に 文字列を代入するサンプル
' https://youtu.be/rtdwyl2Bbic?t=1396
Sub test2()
Dim n As Integer
'全ての段落をサーチ
For n = 1 To ActiveDocument.Paragraphs.Count
'ターゲットの文字列を探す
If InStr(ActiveDocument.Paragraphs(n).Range.Text, "バグ内容") > 0 Then
'n + 1 次の段落
ActiveDocument.Paragraphs(n + 1).Range.Text = "exit for忘れ" & vbCrLf
Exit For 'ループを抜ける
End If
Next n
End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/05 13:20
2021/02/06 00:35
2021/02/06 00:37