本記事のコード(プログラム)は、後日「「検索と置換」ダイアログボックスに文字列を表示させる(その2)」にて更新されています。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
一括置換の翻訳のために、置換用のマクロを使っています。
今は、自分で検索と置換専用のダイアログボックスを設計して使っていますが、以下のマクロを過去ずっと使っていました。かなり便利です。
自作の「検索と置換」ダイアログボックスは、もう少し作りこんでからマニュアルをつけて公開させていただきますので、ご興味がある方はお待ち下さい。
(→後日、山猫の手を公開しました。)
<目次>
このマクロでできること
選択中の文字列を「検索する文字列」と「置換後の文字列」に自動的に入力します。
それだけのマクロなのですが、コピーして貼り付けて、という手間が2回減りますので、便利ですよ。
なにしろ、一括置換の翻訳では、こういう作業が毎日何十回(いや、何百回)と続くわけですから、その効果はけっこうなものになります。
では、なぜわざわざこんなマクロを作っているのか?というと、Wordの性質上、選択中の文字列は、「検索と置換」ダイアログボックスの「検索する文字列」欄に常に自動で入力されるわけではないからです(「検索する文字列」欄に自動入力する場合としない場合 )。
また、「置換後の文字列」欄には自動で入力されません。
そのため、これらを自動で実行してくれるマクロを作りました。
マクロの解説
8行目~12行目で現在選択中の文字列をmyStringに格納しています。
文字が選択されていない場合には、空欄にする処置をしました。このようにする理由は、かつて書いたとおりです(選択されている文字列を文書内で検索するマクロ )。
17行目と18行目で、「検索する文字列」と「置換後の文字列」に選択中の文字列を設定しています。
(後日追記)
6行目で、エラー処理をしております。おそらく、組み込みダイアログボックスのエラーのようなものです。Word 2000の時代からあるようですが、Word 2010になっても依然同様の問題がございます。
ここで表示されるエラーメッセージは、置換数を表示するなど、通常であれば置換後に表示されるべきメッセージです。
また、「検索をする文字列」に文字列に文字を入れずに検索ボタンを押した場合にもエラーになります。
ただ、この種のエラーは無視できるであろうと思われますので、エラーがあってもメッセージは表示させずにおくという処置とさせていただきました。
ご迷惑をかけました。お試し下さい。
(後日さらに追記)
もっと便利な方法があります。こちらをご覧下さい。
「検索と置換」ダイアログボックスに文字列を表示させる(その2)
マクロ
Sub MWM_Replacement() '置換ダイアログ Dim myString As String On Error Resume Next If Selection.Start = Selection.End Then myString = "" Else myString = Selection.Text End If With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = myString .Replacement.Text = myString End With Dialogs(wdDialogEditReplace).Show End Sub
-
6. Re:Re:Re:置換ダイアログ終了時のエラー
kinuasaさん、
こんにちは。お久しぶりです。コメントをどうもありがとうございます。
>下記サイトでもやはりOn Errorで飛ばしているようですね。
>これが一番簡単な対処方法なんだと思います。私も、ネットを中心に調べてみたのですが、On Errorでの処理しか見つかりませんでした。
それにしても、今回ご紹介いただいたコードすばらしいですね。
うれしさが増しました!
毎度、ひと味違うヒントをどうもありがとうございます。
こちらで紹介させていただきました。
http://ameblo.jp/gidgeerock/entry-10999113747.html -
4. Re:Re:置換ダイアログ終了時のエラー
>新田順也☆ワードプログラマーさん
こんにちは。
ご無沙汰しております、きぬあさです。
ダイアログのエラー、目に付いたので調べてみました。
下記サイトでもやはりOn Errorで飛ばしているようですね。
これが一番簡単な対処方法なんだと思います。http://j.mp/qaUidt
メッセージをエラーとして表示するのではなく、通常と変わらずに表示する場合は「Dialogs(wdDialogEditReplace).Show」を「Application.CommandBars.FindControl(ID:=313).Execute」に置き換えれば良さそうですね(^^)
コメント