忍者ブログ

指定位置の文字の書き換えと文字置換を行うワードマクロ

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
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字