これからの季節に親子でハイキング! >>

WORDのマクロでNG文字がある場合のみ、文字を変換させることは可能でしょうか。
WORDのマクロはまったく分らないため、意味も併せて教えて頂ければ嬉しいです。

NG文字:チバ、とうきょう、sakura・・・
変換文字:千葉、東京、桜・・・

①ワード作業を保存する際、NG文字有無を自動で検索する
②NG文字が無い場合、作業を保存して終了
③NG文字がある場合、MsgBox "NG文字があります。変換しますか"
 条件分岐
  YESの場合:NG文字を全て変換する
  NOの場合:作業を保存して終了
 

※因みに③のYESの場合は、複数語の配列を作って、置換操作の繰り返しすることでできるようです・・・
 参考:http://oshiete1.goo.ne.jp/kotaeru.php3?q=994495

質問者からの補足コメント

  • 前提条件について補足します。

    ・NG単語数:10個未満
    ・特定のテンプレート(雛形)を対象
    ・作業中の文書を上書き保存する場合、動くマクロ

    ■設定したいこと
    ①ワード作業を上書き保存する際、NG文字有無を自動で検索する
    ②NG文字が無い場合、作業を保存してワード終了
    ③NG文字がある場合はどうするか選択する。
      ③-1:YESの場合:NG文字を全て変換して上書き保存してワード終了
      ③-2:NOの場合:ワード作業を保存してワード終了

    MsgBoxは以下になると思います・・・

    If MsgBox("NG文字があります。変換しますか", vbYesNo + vbExclamation) = vbYes Then
    MsgBox "NG文字を置き換えします"
    ‘③-1

    Else
    MsgBox "終了"
    ‘③-2

      補足日時:2018/04/03 11:44

A 回答 (3件)

> マクロを実行すると、「With rng.Find」の行で以下エラーが


今確かめてみたら、このままだとエラーになりますね。

「With rng.Find」の行を、「With Selection.Range.Find」に修正
してから実行してみてください。

「rng」の変数を使うつもりで試しているうちに、修正後に有効な
変数の使い方になっていなかったためのようです。
上記のように修正するとともに、「Dim rng As Range」の行は不要
なので、削除しておいてください。
まだまだ勉強不足で、変数の使い方もおぼつかない状態です。

それと、
> ③-2:NOの場合:ワード作業を保存してワード終了
の部分は、どう扱うか迷ったので記載していませんが、ファイルを
閉じるなら「ActiveDocument.Save」の下行に「Document.Close」
をそれぞれ追加すれば可能です。

Word本体を閉じるなら、「Application.Quit」で保存と終了を指定
すれば、可能だと思います。
https://msdn.microsoft.com/ja-jp/vba/word-vba/ar …
https://msdn.microsoft.com/ja-jp/library/microso …(v=office.11).aspx
    • good
    • 0
この回答へのお礼

できました。
早速のご返答ありがとうございます。
勉強になりました。m(__)m

お礼日時:2018/04/04 20:53

No.1の回答者です。


体調を崩して、追加回答が遅くなりました。

上書き保存のときに実行したいのですね。
それなら、マクロの保存先を作業中のファイルまたは雛形として、
以下のマクロを登録します。
(マクロ名をFileSaveにすることで、既定のコマンドを横取り)

Sub FileSave()
'
' FileSave Macro
' 作業中の文書またはテンプレートを保存する前に置換の指定
'
Dim s1, s2 As Variant
Dim i As Long
Dim rng As Range
Dim cnt As Long
cnt = 0

' NG文字を指定
s1 = Array("NG1", "NG2")
' 置換後の文字を指定
s2 = Array("GOOD1", "GOOD2")

 For i = 0 To UBound(s1)
   With Selection.Find
     .Text = s1(i)
     .Forward = True
     .Wrap = wdFindStop
     .MatchCase = False
     .MatchWholeWord = True
      .Replacement.Text = s2(i)
   End With
 ThisDocument.Range(0, 0).Select
  Do Until Selection.Find.Execute = False
    cnt = cnt + 1
   Loop
 Next i

 If cnt > 0 Then
   If MsgBox("NG文字があります。変換しますか", vbYesNo + vbExclamation) = vbYes Then
   MsgBox "NG文字を置き換えします"
   ThisDocument.Range(0, 0).Select
    For i = 0 To UBound(s1)
     With rng.Find
       .Text = s1(i)
       .Replacement.Text = s2(i)
       .Execute Replace:=wdReplaceAll
     End With
    Next i
   Else
   ActiveDocument.Save
   End If
 Else

 ActiveDocument.Save
 End If
End Sub

マクロが苦手なので、もっと良い書き方があると思ったのですが、
私なりの経験だけで作成してみました。
とりあえずは動作すると思います。
    • good
    • 0
この回答へのお礼

うーん・・・

マクロを作成していただきありがとうございます。

頂いたマクロを実行すると、「With rng.Find」の行で以下エラーが発生します。

'実行時エラー'91'
オブジェクト変数または With ブロック変数が設定されていません。

変数は設定していただいていると思われますが、回避する方法を教えていただけないでしょうか。

お礼日時:2018/04/04 14:07

私はマクロが苦手なほうです。


ですから、希望していることができるものを提示することは無理
なので、アドバイス程度の回答になります。

・前提条件に付いて

NG文字の有無を出すマクロは、すべての文書が対象ですか?
(新規文書や差し込み文書、他からの文書を保存しなおす場合も
含む)

文書を閉じるときなのか、名前を付けて保存の場合と上書き保存
の場合で、どちらかの場合に出すものなのかで対応が変わります。

NG文字はかなりの単語数になるのですか?
質問にある過去ログの配列の場合だと、それほど多くないの場合
なので。

特定の文書のみの場合と、特定のテンプレート(雛形)の場合と
では設定対象が違います。どちらになるのかを限定されたほうが
良いと思うので、文書とテンプレートのどちらになりますか?
(すべての文書を対象にしないと思われるので、Normal.dotmに
登録するのはお勧めしない)

Excelなどのマクロなら、自作できるのですか?
基本部分は変わらないので、MsgBoxの扱いなどは基本的に同じ。

その他の条件もあるなら、できるだけ出されたほうが回答が付き
やすいと思います。
    • good
    • 0
この回答へのお礼

回答いただき、ありがとうございます。
前提条件について補足します。

・NG単語数:10個未満
・特定のテンプレート(雛形)を対象
・作業中の文書を上書き保存する場合の動きです。
・簡単なExcelマクロなら、自作できるのでMsgBoxの設定はできます。

■設定したいこと
①ワード作業を上書き保存する際、NG文字有無を自動で検索する
②NG文字が無い場合、作業を保存してワード終了
③NG文字がある場合はどうするか選択する。
  ③-1:YESの場合:NG文字を全て変換して上書き保存してワード終了
  ③-2:NOの場合:ワード作業を保存してワード終了

MsgBoxは以下になると思います・・・

If MsgBox("NG文字があります。変換しますか", vbYesNo + vbExclamation) = vbYes Then
MsgBox "NG文字を置き換えします"
‘③-1

Else
MsgBox "終了"
‘③-2

よろしくお願いします。

お礼日時:2018/04/03 11:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング