指定位置の文字の書き換えと文字置換を行うワードマクロ
2024年06月06日
前回、文書管理番号を取得するワードマクロを作ってみた。
「エクセルファイルに追記して保存するワードマクロ」
使っていて思うのは・・・
文書番号取得してくれるなら、文書番号と日付を書き換えてよ!
そんなわけで作ってみた。
「エクセルファイルに追記して保存するワードマクロ」
使っていて思うのは・・・
文書番号取得してくれるなら、文書番号と日付を書き換えてよ!
そんなわけで作ってみた。
日付は元号表記なので、令和で始まり日で終わる文字列を置換する方針。
文書番号は、共通文字列のあとに固定文字数の数字がくる。
なので、ワイルドカードを使ってキーワード置換する作戦。
検索や置換はWith ActiveDocument.Content.Findを使う。
キーワードは、.Textで指定。
ワイルドカードは、.MatchWildcards = True で有効化。
日付は、.Text = "令和*日" でうまくヒットして置換もできるのに、
文書番号は、.Text = "文書番号?????????" でヒットしない。。。
なんで!?
試行錯誤の結果、wordの不具合であることに気付いた。
(処理の順番を入れ替えたら、日付がヒットしなくなった。& 検索ウィンドウ開いたらキーワードがおかしい)
キーワード検索したあとに、キーワードを変更しても前のキーワードで検索するバグありますよね!!
対策は、別途調べるとして、今回はたまたま文書番号が1行目1文字目からスタートしてたので、
ActiveDocument.Range(Start:=開始位置, End:=終了位置).Text を直接書き換えることにした。
これなら検索を1回しかしないので大丈夫!
そんな感じで以下ソース。
Private Sub 日付と文書番号を修正する(文書番号 As String, 日付 As String)
ActiveDocument.Range(Start:=0, End:=13).Text = 文書番号 ' "文書番号41-11-081"
' 日付の検索と置換
With ActiveDocument.Content.Find
.ClearFormatting
.Text = "令和*日" ' 令和で始まり、日で終わる日付を検索
.MatchWildcards = True
.Replacement.Text = 日付 ' "令和6年6月3日" ' 置換後の日付を指定
.Execute Replace:=wdReplaceOne ' 最初に一致した箇所のみを置換
End With
End Sub
PR
Comment