ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:azuma3chom myText = Selection.Range.Textについて
困り度:
  • すぐに回答を!
任意の文字列を選択することを含むワードのマクロでは、検索置換ウインドウを使うと、以後、正常な置換が行われないようなのですが、どうしたら、正しい置換が行われるように確保できますでしょうか。どなたか、お教え願います。例えば、以下のコードです。

Dim myText As String
myText = Selection.Range.Text
With Selection.Find
With .Replacement.Font
.Name = "明朝"
.Color = 255
.Bold = True
End With
.ClearFormatting
.Text = myText
.Format = True
.Forward = True
.Wrap = wdFindAsk
'.Wrap = wdFindContinue
.MatchFuzzy = False
Selection.Find.Execute Replace:=wdReplaceAll
End With
ある文字列を選んで実行すると、赤字で太字になります。別の文字列をを選んで実行すると、同様に赤字で太字になります。ところが、検索置換ウインドウを使ってしまうと、その後は、検索置換ウインドウの入力状態に支配されてしまいます。
このようなことは、他のマクロでも確認しています。例えば次のマクロもそうです。
Dim myText As String
myText = Selection.Range.Text
Options.DefaultHighlightColorIndex = wdBrightGreen
With Selection.Find
With .Replacement
.ClearFormatting
.Highlight = True
End With
End With
With Selection.Find
With .Replacement
.ClearFormatting
.Highlight = True
End With
.ClearFormatting
.Text = myText
.Format = True
.Forward = True
.Wrap = wdFindAsk
'.Wrap = wdFindContinue
'.MatchFuzzy = True
Selection.Find.Execute Replace:=wdReplaceAll
End With

myText = Selection.Range.Textはだめなようです。
通常の検索置換は、検索置換ウインドウが作動するようです。検索置換ウインドウが作動しない検索置換のコードがあれば教えてください。
For〜Nextによる一文字ずつの繰り返し処理では時間がかかるので、一ワードずつFor Eachの繰り返し処理で検索置換ウインドウが作動しない検索置換のコードがあれば教えていただけると幸甚です。
質問投稿日時:08/08/04 21:24
質問番号:4228016
この質問に対する回答は締め切られました。

回答

良回答20pt

回答者:Wendy02 こんにちは。

同じ内容の趣旨の質問が、別に出ていますが、私は、もう回答のしようがないです。
http://oshiete1.goo.ne.jp/qa4197645.html

あまりつまらない書き方はしたくありませんが、Word マクロを本当に解答できる人は、ここのカテゴリでも、本当に少ないのです。どうやら、こちらの提供したマクロ自体は、本当の検証はされていないようにお見受けしています。

今回の質問は、既に、同じ趣旨の解答は数度してきました。「Word 2002」 で、万が一、私のコードで動かないなら、それは、その中のプロパティの一部にサポートされないものがあるとは解釈できますが、そのご指摘もありませんでした。

ただ、今回は、どうみても、それは、ご自身が削除したのか、ご自身がアレンジして、不具合が生じたものだと思えます。記録マクロなら、記録マクロレベルでもよいと思います。しかし、その都度、自分流にアレンジして、不具合があると言われても、キリがありません。プロパティのデフォルト値だと思って削除したコードがあるはずだと思われます。一見、サマになっているようでも、単独のマクロとしては、一目見て、プロパティ値が足りません。当然、マニュアル・コマンドの時の設定値が残ってしまいます。

基本的に、自分がアレンジしてよい部分と、そうではない部分は、一つずつ、自分自身で吟味しないといけません。一つ一つの意味を理解しながら、コードを書かないと、いつまでも、同じことの繰り返しになってしまいます。もしも、意味が不明なプロパティがあるときは、いじらないようにする、ということです。

ご自身が質問してレスを貰った中のコードをもう一度検討し、どこが違うのかみてください。これ以上、私個人としては、この件で掲示板で教えるには限界です。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/08/06 12:44
回答番号:No.1
この回答へのお礼Wendy02さん、ありがとうございます。

>プロパティのデフォルト値だと思って削除したコードがあるはずだと思われます。一見、サマになっているようでも、単独のマクロとしては、一目見て、プロパティ値が足りません。当然、マニュアル・コマンドの時の設定値が残ってしまいます。

>基本的に、自分がアレンジしてよい部分と、そうではない部分は、一つずつ、自分自身で吟味しないといけません。一つ一つの意味を理解し
ながら、コードを書かないと、いつまでも、同じことの繰り返しになってしまいます。もしも、意味が不明なプロパティがあるときは、いじらないようにする、ということです。



どこかで、プロパティをいじらないでくださいという解答を見た気がします。
他者の同様の質問について、回答者は、プロパティを省いたマクロで回答していますが、プロパティを省かない方が良い、という回答をしているのを見ました。プロパティを省くと、大変なことになるから、初心者は分からないならば省かないで、という強いメッセージがあるとよかったのですが、・・・・後のまつりですね。

はじめのころのプロパティを省いていないコードを探してもう一度見てみます。(一応、年月日を書いて、実行可能と記して、自分宛てにメールしていますので、探せると思います。)

コードを短くすることはやめます。
ありがとうございました