Word文書中の英数字からなる単語(例:D123)を引用符で囲むマクロを、記録マクロにより作成し、下記のようなマクロを得ました。(マクロの名前は「英数字引用符付加」と変更しました。)これを実行すると、無事、目的を果たすことができました。

Sub 英数字引用符付加()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "<[a-zA-Z]{1,10}[0-9]{1,10}>"
.Replacement.Text = """^&"""
.Forward = True
.Wrap = wdFindContinue
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

しかし翌日になると、必ず次のエラーメッセージが出て機能しなくなります。
「実行時エラー'4664'
MatchWildcardsとMatchSoundsLike、MatchAllWordForms、MatchFuzzy は同時にTrueにすることはできません。」
なぜ翌日になるとエラーになるのか、どうすれば解決できるのか、教えていただきたいのですが...。よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2017/10/28 23:55:36
  • 終了:2017/11/05 00:00:06

回答(2件)

id:gfik No.1

いつか回答回数16ベストアンサー獲得回数102017/10/30 18:41:27

無理やりですが
エラーを読むと、検索時一番上と下の3つは同時に選択できないので
MatchWildcards(ワイルドカードの使用)
MatchAllWordForms(英単語の異なる活用形も検索)
MatchSoundsLike(英語のあいまい検索 だったと思う)
MatchFuzzy(日本語のあいまい検索 だったと思う)
強制的に選択しなければできると思います。

Sub 英数字引用符付加改()
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "<[a-zA-Z]{1,10}[0-9]{1,10}>"
        .Replacement.Text = """^&"""
        .Forward = True
        .Wrap = wdFindContinue
        
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchFuzzy = False
        
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

> なぜ翌日になるとエラーになるのか、
すみません、わかりません。
推測でしかありませんが
ログインしなおしたり、別の人がWordを使ったりなどして
Wordの設定が変わっているのではないかと想像しています。

私が作成したVBAも明日動かかなかったら、
その時修正します。

id:gfik

24時間たちました。
私の手元の昨日保存したマクロは昨日と同じ動作をしましたので、
matspatさんのところでエラーが出るのであれば
もっと詳しく情報を書いてください。

2017/10/31 20:43:17
id:matspat

回答、ありがとうございました。
いただいたヒントのように修正しましたところ、翌日になってもきちんと動作しました。ありがとうございました。
もっと早く事後報告をしたかったのですが、どこにそれを投稿すればよいのか分からず、今日にいたってしまいました。お緩いください。

その後、私のエラーの原因を調べていて判明したのは、Selectionに対する設定条件は、Wordを閉じるとご破算になってしまい、その後にWordを立ち上げると、MatchFuzzyはデフォルトでTrueに設定され、WildCards=Trueとかち合ってエラーになる、とのことでした。ご報告申し上げます。

2017/11/01 11:51:30
id:ardarim No.2

ardarim回答回数897ベストアンサー獲得回数1452017/11/01 01:59:01

マクロ記録で得られた、上記のFindというオブジェクトは、Wordの[検索と置換]ダイアログボックスと連動しています。
https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/find-object-word

そのため、例えば[検索と置換]ダイアログボックスで「ワイルドカードを使用する」を選択すると、

MatchWildcards=True
MatchSoundsLike=False
MatchAllWordForms=False
MatchFuzzy=False

となります。
MatchWildcardsは「ワイルドカードを使用する」、MatchSoundsLikeは「あいまい検索(英)」、MatchAllWordFormsは「英単語の異なる活用形も検索する」、MatchFuzzyは「あいまい検索(日)」にそれぞれ相当します。[検索と置換]ダイアログボックスでそれぞれのチェックボックスをONにしてみると分かると思いますが、これらのチェックボックスは排他になっていて、どれか一つをONにすると他のチェックはOFFになります。これはマクロでは上のようにMatchWildcards、MatchSoundsLike、MatchAllWordForms、MatchFuzzyのどれか一つしかTrueにならない(できない)ことに対応します。


一方で、Wordをいったん終了して、再度起動して[検索と置換]ダイアログボックスを開いてみると分かりますが、Word起動時には「あいまい検索(日)」が自動的に有効になります。つまり、マクロでは
MatchWildcards=False
MatchSoundsLike=False
MatchAllWordForms=False
MatchFuzzy=True

という状態です。(24時間待つ必要はなく、Wordを起動しなおすだけで設定が初期値に戻ります)
この状態で先に記録したマクロを実行すると、MatchWildcardsにTrueを代入するため、
MatchWildcards=True
MatchSoundsLike=False
MatchAllWordForms=False
MatchFuzzy=True

という状態になります。つまり、MatchWildcardsとMatchFuzzyが同時にTrueになっている状態です。これはWordのマクロの仕様では実行できないことになっているため、エラーが出ています。

回避策としては、いつか さんが書かれているマクロで大丈夫なはずです。
つまり、MatchWildcards、MatchSoundsLike、MatchAllWordForms、MatchFuzzyのうち必ずどれか一つだけがTrueになるように明示的に代入を行うことが必要なのです。
マクロの記録ではそこまで配慮してはくれませんので、この辺はマクロの知識が必要になってきます。

id:matspat

ご丁寧な回答ありがとうございました。
今ではようやく私の困難の原因を理解することができるようになりました。教えていただいたせっていで問題も解決いたしました。佐渡、御礼申し上げます。

2017/11/02 10:06:47

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません