人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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にすることはできません。」
なぜ翌日になるとエラーになるのか、どうすれば解決できるのか、教えていただきたいのですが...。よろしくお願いいたします。

●質問者: matspat
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● いつか

無理やりですが
エラーを読むと、検索時一番上と下の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も明日動かかなかったら、
その時修正します。


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

matspatさんのコメント
回答、ありがとうございました。 いただいたヒントのように修正しましたところ、翌日になってもきちんと動作しました。ありがとうございました。 もっと早く事後報告をしたかったのですが、どこにそれを投稿すればよいのか分からず、今日にいたってしまいました。お緩いください。 その後、私のエラーの原因を調べていて判明したのは、Selectionに対する設定条件は、Wordを閉じるとご破算になってしまい、その後にWordを立ち上げると、MatchFuzzyはデフォルトでTrueに設定され、WildCards=Trueとかち合ってエラーになる、とのことでした。ご報告申し上げます。

2 ● ardarim

マクロ記録で得られた、上記の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になるように明示的に代入を行うことが必要なのです。
マクロの記録ではそこまで配慮してはくれませんので、この辺はマクロの知識が必要になってきます。


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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ