• ベストアンサー
  • 困ってます

Windows7, MSWord2007 でマクロを使用しています。以

  • 質問No.5875212
  • 閲覧数527
  • ありがとう数15
  • 回答数4

お礼率 71% (713/1004)

Windows7, MSWord2007 でマクロを使用しています。以前うまく行っていたのに今日はエラーで止まります。
記入した文字を日本字はMS明朝10.5PT, 半角アルファベットはTimesNewRomanPT12 に統一するマクロです。
[検索する文字列]に指定したパターンマッチングが正しくありません、と表示されます。
他人からいただいたマクロなので自分で直せません。ご援助いただければと存じます。

止まった行: .Execute Replace:=wdReplaceAll

マクロ全文:
Sub SelectedFontChangedMSMincho10_5TimesNewRoman12()
Dim myRng As Range
With ActiveDocument
Set myRng = .Range(Selection.Range.Start, .Range.End)
End With
With myRng.Font
.NameFarEast = "MS 明朝"
.NameAscii = "Times New Roman"
.NameOther = "Times New Roman"
.Size = 10.5
End With
With myRng.Find
.ClearFormatting
.Text = "[0-9A-Za-z,.\\\!\?""'/$\%\&\#\(\)\=\-\+\<\>]{1,}" '半角スペース~チルダ
.Forward = True
.Wrap = wdFindStop
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
.MatchFuzzy = False
With .Replacement
.ClearFormatting
.Text = ""
.Font.Size = 12
End With
.Execute Replace:=wdReplaceAll
End With
End Sub

質問者が選んだベストアンサー

  • 回答No.4
  • ベストアンサー

ベストアンサー率 57% (3570/6233)

どうやら、ご質問とコードとはかなり食い違いがあるようです。

>3行目から後を最後まで、変換して欲しいのです。
>変換後は、全角文字はMS明朝 10.5Pt、半角文字はTimes New Roman 12 Pt にしたいのです。
それに、この内容ですと、マクロの内容がまったく違いますね。
ただ、明朝とTimes New Roman の区分けはやめました。単に、半角と全角の区分けで十分ではないかと思います。

>3.うううううウウウウウ宇宇宇宇宇uuuuu3333333333?????
全角・半角の問題があるから、一部、半角カタカナあたりが抜けがあるかもしれません。
もし、全部を変換するなら、一端、10.5 pt にしておいて、そこから、半角文字を、12 pt にしても良いかもしれません。以下は、最初から、区分けしています。


'//

Sub prcReplaceFontSize()
  Dim Ar1 As Variant
  Dim Ar2 As Variant
  Dim Ar3 As Variant
  Dim i As Long
  Dim rng As Range
  Ar1 = Array("[ぁ-龠!-~]*", "[^32-~]*")
  Ar2 = Array(10.5, 12)
  'Ar3 = Array("MS 明朝", "Times New Roman") 'ここは生きていません。
    
    Selection.EndKey Unit:=wdStory, Extend:=wdExtend
    Set rng = Selection.Range
    For i = 0 To 1
    With rng.Find
      .ClearFormatting
      .Text = Ar1(i) 
      .Wrap = wdFindStop
      .Font.ColorIndex = wdAuto
      '.Font.Size = Ar2(i) ''フォントサイズと種類は略して良いと思います
      '.Font.NameAscii = Ar3(i) "''
      .Format = True
      .MatchCase = False
      .MatchWholeWord = False
      .MatchByte = False
      .MatchAllWordForms = False
      .MatchSoundsLike = False
      .MatchFuzzy = False
      .MatchWildcards = True
      With .Replacement
        .ClearFormatting
        .Text = "^&"
        .Font.Size = Ar2(i)
      End With
      .Execute Replace:=wdReplaceAll
    End With
    Next i
    Selection.Collapse
End Sub



>他人様に全部書いて欲しいなどと申し上げるなど、躊躇いたしますが、
全部書いて欲しいなどとは書いていません。私は、中途半端に回答を済ませるようなつもりは一切ありません。これは、ご質問者さんには、関係がない話です。

多くの回答者は、本当はWord VBAをきちんと勉強したこともないままに、記録Macro程度のコードしか書けない程度で、こちらのコードを評価したりするマナー違反が、Officeの掲示板で繰り返されたからです。ただ、私は、ここのサイトに来る前からWord VBAの掲示板にも書いてきましたが、Word VBAの回答した結果は、その達成感よりもストレスや不満が残るものも多いのです。記録Macro程度で済まされるなら、私の回答などいりませんからね。
補足コメント
BASKETMM

お礼率 71% (713/1004)

お返事が遅れました。いただいたご提案はうまく動作いたしました。
ただ一点、希望を申し上げれば、変換後のフォントは、MS明朝とTimes New Roman でなくては困るのです。
よろしく。
投稿日時:2010/05/16 10:43
お礼コメント
BASKETMM

お礼率 71% (713/1004)

有り難うございました。
投稿日時:2010/07/21 15:52

その他の回答 (全3件)

  • 回答No.3

ベストアンサー率 57% (3570/6233)

もう一度、見直しますが、もともとは、記録マクロから起こしたもののようです。
それでは、ダメのようですから、プログラミング・マクロを考えます。(本日は、眠くて無理です)
そのままでは、まだ、おかしい部分があるような気がしましたが、書き直しが必要なので、それはやめていました。

ただ分からないのは、
>1....選択部部のみを対象とするのではなく、選択部分以後を対象とします。

半角文字をすべてを、12 pt にすることではなかったのではないでしょうか?
>(日本字はMS明朝、英字はTimes New Roman)
ただ、なんとなく、本当にそういう条件で保たれているのか分かりません。

もちろん、上から下に検索するようにして、置換するように書かないといけないかもしれません。ただ、エラーが出る原因は良くわかっていません。

>2.止まった行: .Execute Replace:=wdReplaceAll このコマンドは何を現しているのでしょう。

一括置換ですが、実際のプログラミング・マクロには、素人の方以外は、そのようなことはあまりしません。

どなたか、我こそは自信があるなら、その方が完成すれば、それはそれで構いません。今のところ、一般的に気がついた点でしか、アドバイスをしていません。もし、他人のマクロで完成しても、その人のコーディングに文句をつけるようなマナー違反はしません。ここ数カ月、ここで回答者のマナー違反が目立ったので、念のために記しておきます。
補足コメント
BASKETMM

お礼率 71% (713/1004)

私の書き方が不明瞭で申し訳ありません。まずマクロの目的です。次のようなワード文章を考えます。
1.あああああアアアアア亜亜亜亜亜aaaaa1111111111?????
2.いいいいいイイイイイ胃胃胃胃胃iiiiiii2222222222?????
3.うううううウウウウウ宇宇宇宇宇uuuuu3333333333?????
4.えええええエエエエエ絵絵絵絵絵eeeee4444444444?????
5.おおおおおオオオオオ夫夫夫夫夫ooooo5555555555?????
6.かかかかかカカカカカ過過過過過kakakakaka6666666666?????
7.きききききキキキキキ来来来来来kikikikiki7777777777°°°°°
3行目を選択しておき、マクロを起動します。すると、一行目、二行目は変換せず、
3行目から後を最後まで、変換して欲しいのです。
変換後は、全角文字はMS明朝 10.5Pt、半角文字はTimes New Roman 12 Pt にしたいのです。

他人様に全部書いて欲しいなどと申し上げるなど、躊躇いたしますが、
もしお願い出来るなら、大変助かるのです。
投稿日時:2010/05/09 08:02
  • 回答No.2

ベストアンサー率 57% (3570/6233)

みた感じは、エラーが出やすいコードだとは思いました。なぜエラーが出るかというと、Excel VBAとは違って、Word VBAは、表のメニュー設定とつながっているからです。VBAのプロパティには順序があります。

具体的には、

> .MatchWildcards = True
> .MatchFuzzy = False

この部分が、逆にだと思います。

 .MatchFuzzy = False
 .MatchWildcards = True

記録マクロでは分かりません。それと、検索値は、そのような書き方をしなくてもよいと思います。

ANSIの文字全部だとしたら、
"[0-9A-Za-z,.\\\!\?""'/$\%\&\#\(\)\=\-\+\<\>]{1,}" '半角スペース~チルダ
 ↓
 .Text = "[^32-~]{1,}"

スペースからチルダまででしたら、このようになります。スペースは、実際の半角スペースでも良いです。

置換値は、入れなくても良いようですが、以下のように ^&にしても良いようです。

 With .Replacement
  .ClearFormatting
  .Text = "^&"
  .Font.Size = 12
 End With
補足コメント
BASKETMM

お礼率 71% (713/1004)

有り難うございます。出張中のため、戻ってから、試します。
1.知識不足のため、頭の中だけでは、検討が出来ません。
2.エクセルと異なり、ワード用のマクロ解説本がありません。
などの理由で、時間をいただきます。
投稿日時:2010/05/06 20:42
お礼コメント
BASKETMM

お礼率 71% (713/1004)

このサイトは補足を一度しか書けないので、お礼の覧に報告を書きます。
やはりうまく動きません。

ご提案の、数行は書き直してみました。特に、↓
 .Text = "[^32-~]{1,}"
の部分は、当然だと思いましたし、すっきりいたしました。残念ながら、起こっている現象の直接解決にはなりませんでした。テストの結果では、

0.フォントは全て、指定のフォントに置き換わりました。(日本字はMS明朝、英字はTimes New Roman)
日本字は指定の大きさ 10.5 に変わりました。しかし、英字は12 にしたいのに、日本字と同じ大きさ 10.5 になってしまうのです。
最後に、エラー表示が出て、デバッグを指定すると(.Execute Replace:=wdReplaceAll)と表示されます。

1.このマクロは、選択部部のみを対象とするのではなく、選択部分以後を対象とします。
対象として、最後の一字のみを指定してみましたが、最後が日本字であっても、英字であったも同じ結果/エラーなのです。

2.止まった行: .Execute Replace:=wdReplaceAll このコマンドは何を現しているのでしょう。私は意味を分からずに、丸写しで使ったのです。「恥!!!」

よろしくご援助のほどをお願いいたします。
投稿日時:2010/05/08 19:48
  • 回答No.1

ベストアンサー率 49% (39/79)

同じ環境で試してみましたが、正常に動きますよ。

このマクロは選択部分だけを対象に動くように作られていますので、
1行ずつ順に選択して実行してみられてはいかがですか。
どういう文字を対象にしたときエラーが発生するかがわかれば
対処のしようがあると思います。
補足コメント
BASKETMM

お礼率 71% (713/1004)

有り難うございます。
自分で考えず、丸投げの質問なので、とても気が引けていたのです。
一行ずつを対象にしてみるのは、基本的やり方ですね。
今から出張に出るので、戻ったら、テストいたします。
また、お願いいたします。
投稿日時:2010/05/06 16:21
お礼コメント
BASKETMM

お礼率 71% (713/1004)

このサイトは補足を一度しか書けないので、お礼の覧に報告を書きます。
やはりうまく動きません。
0.フォントは全て、指定のフォントに置き換わりました。(日本字はMS明朝、英字はTimes New Roman)
日本字は指定の大きさ 10.5 に変わりました。しかし、英字は12 にしたいのに、日本字と同じ大きさ 10.5 になってしまうのです。
最後に、エラー表示が出て、デバッグを指定すると(.Execute Replace:=wdReplaceAll)と表示されます。

1.このマクロは、選択部部のみを対象とするのではなく、選択部分以後を対象とします。
お勧めに従い、最後の一字のみを指定してみましたが、最後が日本字であっても、英字であったも同じ結果/エラーなのです。

2.止まった行: .Execute Replace:=wdReplaceAll このコマンドは何を現しているのでしょう。私は意味を分からずに、丸写しで使ったのです。「恥!!!」

よろしくご援助のほどをお願いいたします。
投稿日時:2010/05/08 19:42
関連するQ&A

ピックアップ

ページ先頭へ