Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


36 / 308 ツリー ←次へ | 前へ→

【777】マクロ作動で「検索/置換」コマンドでフォントが引き継がれるを避ける方法 ひさっぷ 13/6/1(土) 11:05 質問[未読]
【778】Re:マクロ作動で「検索/置換」コマンドでフ... マナ 13/6/1(土) 13:39 発言[未読]
【779】Re:マクロ作動で「検索/置換」コマンドでフ... マナ 13/6/1(土) 15:59 発言[未読]
【780】Re:マクロ作動で「検索/置換」コマンドでフ... ひさっぷ 13/6/2(日) 11:26 お礼[未読]
【781】Re:マクロ作動で「検索/置換」コマンドでフ... マナ 13/6/2(日) 12:05 発言[未読]
【784】Re:マクロ作動で「検索/置換」コマンドでフ... マナ 13/6/8(土) 11:49 発言[未読]

【777】マクロ作動で「検索/置換」コマンドでフォ...
質問  ひさっぷ  - 13/6/1(土) 11:05 -

引用なし
パスワード
   当方、置換マクロを中心にWordマクロを使っています。

校正作業をする際に、「取消線の削除」→「改行の削除」というプロセスをマクロを使ってよく行います。

その際、「取消線の削除」のフォント情報が、「検索/置換」の画面を見ると、引き継がれてしまっています。

具体的に言うと、「編集/置換」で現れる、「検索する文字列」の下の「オプション」の欄が、

「書式」:取り消し線、二重取り消し線(なし)

となってしまっています。

それが原因で、「改行の削除」のマクロが効くのは、取消線が入っている部分のみになってしまいます。

「取消線の削除」を自作で簡単なのを作っているので、参考に挙げさせていただいています。
ここから、書式をデフォルトに戻すプログラムを足せばいいのは分かるのですが、どうすればできるのか分からないので、困っています。

true, falseといった情報を解除するためのコマンドを調べる方法が分からないので、そうした知識がない場合に、調べる方法というのもあわせて教えてくださると、賢くなるので非常に助かります。

●取り消し線を削除するマクロ
Sub 取消線削除()
  With Selection.Find
    .Font.StrikeThrough = True
    .Font.DoubleStrikeThrough = False
    .Text = "*"
    .Replacement.Text = ""
    .Wrap = wdFindStop
    .MatchFuzzy = False
    .MatchWildcards = True
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
End Sub

●改行を削除するマクロ
Sub 改行削除()
  With Selection.Find
    .Text = "^13"
    .Replacement.Text = ""
    .Wrap = wdFindStop
    .MatchFuzzy = False
    .MatchWildcards = True
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
End Sub

【778】Re:マクロ作動で「検索/置換」コマンドで...
発言  マナ  - 13/6/1(土) 13:39 -

引用なし
パスワード
   私も勉強中で、間違ってるかもしれませんが、回答してみます。
あとは、ヘルプなりネットで調べてみてください。

Selection.Find.ClearFormatting
とか
Selection.Find.Replacement.ClearFormatting
で書式を解除できます。
マクロの記録でもわかりますし、検索・置換のマクロはサンプルが多いのでネットで簡単に調べることができます

Sub test()
  With Selection.Find
    .ClearFormatting
    .Text = "^13"
    .Replacement.ClearFormatting
    .Replacement.Text = ""
    .Wrap = wdFindStop
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
End Sub

また、SelectionオブジェクトではなくRangeオブジェクトを使う方法があります。

>その際、「取消線の削除」のフォント情報が、「検索/置換」の画面を見ると、引き継がれてしまっています。

Rangeオブジェクトの場合、「検索/置換」の設定とは関係なく実行できるらしいです。

Sub test2()
  Dim myRng As Range
  
  Set myRng = Selection.Range
  
  With myRng.Find
    .Text = "^13"
    .Replacement.Text = ""
  End With
  myRng.Find.Execute Replace:=wdReplaceAll
End Sub

【779】Re:マクロ作動で「検索/置換」コマンドで...
発言  マナ  - 13/6/1(土) 15:59 -

引用なし
パスワード
   ごめんなさい修正です。
Selectionオブジェクトの場合
.MatchFuzzy = False
は省いちゃいけませんでしたね。

またこの場合、削除なので、
.Replacement.ClearFormatting
は不要でしょうか。たぶんあっても問題ないと思いますが。

Sub test()
  With Selection.Find
    .ClearFormatting
    .Text = "^13"
    .Replacement.Text = ""
    .Wrap = wdFindStop
    .MatchFuzzy = False
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
End Sub

ということで、私はRangeオブジェクトを使うことが多いです。

【780】Re:マクロ作動で「検索/置換」コマンドで...
お礼  ひさっぷ  - 13/6/2(日) 11:26 -

引用なし
パスワード
   ありがとうございます!さっそくSelection.Find.ClearFormattingのマクロを単独で作って、活用しています。

本来なら、今まで作ったマクロに修正を入れないといけないのですが、どれにClearFormattingを入れるべきなのか、調べるのが、ちょっと面倒なんです。

【781】Re:マクロ作動で「検索/置換」コマンドで...
発言  マナ  - 13/6/2(日) 12:05 -

引用なし
パスワード
   >本来なら、今まで作ったマクロに修正を入れないといけないのですが、どれにClearFormattingを入れるべきなのか、調べるのが、ちょっと面倒なんです。

基本的には、必ずClearFormattingすべきじゃありませんか。
「取り消し線を削除するマクロ」も。

マクロ実行前にどんな操作をしたかで、結果がかわる心配はありませんか。
試しに、手操作で、赤文字の検索を実行後、マクロを実行するとどうなるでしょうか。

Selection.Findの場合、ClearFormattingし、オプション設定も省略しないのが原則だと思います。

私はそこまでしませんが、検索後にも、ご丁寧にClearFormattingしているコードを見たことあります。

【784】Re:マクロ作動で「検索/置換」コマンドで...
発言  マナ  - 13/6/8(土) 11:49 -

引用なし
パスワード
   参考まで。

Clear settings from Find and Replace dialog to prevent unexpected results from future Find or Replace operations
ht tp://word.mvps.org/FAQs/MacrosVBA/ClearFind.htm

36 / 308 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
207160
(SS)C-BOARD v3.8 is Free