![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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ベストアンサー
- 回答日時:
どうやら、ご質問とコードとはかなり食い違いがあるようです。
>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程度で済まされるなら、私の回答などいりませんからね。
この回答への補足
お返事が遅れました。いただいたご提案はうまく動作いたしました。
ただ一点、希望を申し上げれば、変換後のフォントは、MS明朝とTimes New Roman でなくては困るのです。
よろしく。
No.3
- 回答日時:
もう一度、見直しますが、もともとは、記録マクロから起こしたもののようです。
それでは、ダメのようですから、プログラミング・マクロを考えます。(本日は、眠くて無理です)
そのままでは、まだ、おかしい部分があるような気がしましたが、書き直しが必要なので、それはやめていました。
ただ分からないのは、
>1....選択部部のみを対象とするのではなく、選択部分以後を対象とします。
半角文字をすべてを、12 pt にすることではなかったのではないでしょうか?
>(日本字はMS明朝、英字はTimes New Roman)
ただ、なんとなく、本当にそういう条件で保たれているのか分かりません。
もちろん、上から下に検索するようにして、置換するように書かないといけないかもしれません。ただ、エラーが出る原因は良くわかっていません。
>2.止まった行: .Execute Replace:=wdReplaceAll このコマンドは何を現しているのでしょう。
一括置換ですが、実際のプログラミング・マクロには、素人の方以外は、そのようなことはあまりしません。
どなたか、我こそは自信があるなら、その方が完成すれば、それはそれで構いません。今のところ、一般的に気がついた点でしか、アドバイスをしていません。もし、他人のマクロで完成しても、その人のコーディングに文句をつけるようなマナー違反はしません。ここ数カ月、ここで回答者のマナー違反が目立ったので、念のために記しておきます。
この回答への補足
私の書き方が不明瞭で申し訳ありません。まずマクロの目的です。次のようなワード文章を考えます。
1.あああああアアアアア亜亜亜亜亜aaaaa1111111111?????
2.いいいいいイイイイイ胃胃胃胃胃iiiiiii2222222222?????
3.うううううウウウウウ宇宇宇宇宇uuuuu3333333333?????
4.えええええエエエエエ絵絵絵絵絵eeeee4444444444?????
5.おおおおおオオオオオ夫夫夫夫夫ooooo5555555555?????
6.かかかかかカカカカカ過過過過過kakakakaka6666666666?????
7.きききききキキキキキ来来来来来kikikikiki7777777777°°°°°
3行目を選択しておき、マクロを起動します。すると、一行目、二行目は変換せず、
3行目から後を最後まで、変換して欲しいのです。
変換後は、全角文字はMS明朝 10.5Pt、半角文字はTimes New Roman 12 Pt にしたいのです。
他人様に全部書いて欲しいなどと申し上げるなど、躊躇いたしますが、
もしお願い出来るなら、大変助かるのです。
No.2
- 回答日時:
みた感じは、エラーが出やすいコードだとは思いました。
なぜエラーが出るかというと、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
この回答への補足
有り難うございます。出張中のため、戻ってから、試します。
1.知識不足のため、頭の中だけでは、検討が出来ません。
2.エクセルと異なり、ワード用のマクロ解説本がありません。
などの理由で、時間をいただきます。
このサイトは補足を一度しか書けないので、お礼の覧に報告を書きます。
やはりうまく動きません。
ご提案の、数行は書き直してみました。特に、↓
.Text = "[^32-~]{1,}"
の部分は、当然だと思いましたし、すっきりいたしました。残念ながら、起こっている現象の直接解決にはなりませんでした。テストの結果では、
0.フォントは全て、指定のフォントに置き換わりました。(日本字はMS明朝、英字はTimes New Roman)
日本字は指定の大きさ 10.5 に変わりました。しかし、英字は12 にしたいのに、日本字と同じ大きさ 10.5 になってしまうのです。
最後に、エラー表示が出て、デバッグを指定すると(.Execute Replace:=wdReplaceAll)と表示されます。
1.このマクロは、選択部部のみを対象とするのではなく、選択部分以後を対象とします。
対象として、最後の一字のみを指定してみましたが、最後が日本字であっても、英字であったも同じ結果/エラーなのです。
2.止まった行: .Execute Replace:=wdReplaceAll このコマンドは何を現しているのでしょう。私は意味を分からずに、丸写しで使ったのです。「恥!!!」
よろしくご援助のほどをお願いいたします。
No.1
- 回答日時:
同じ環境で試してみましたが、正常に動きますよ。
このマクロは選択部分だけを対象に動くように作られていますので、
1行ずつ順に選択して実行してみられてはいかがですか。
どういう文字を対象にしたときエラーが発生するかがわかれば
対処のしようがあると思います。
この回答への補足
有り難うございます。
自分で考えず、丸投げの質問なので、とても気が引けていたのです。
一行ずつを対象にしてみるのは、基本的やり方ですね。
今から出張に出るので、戻ったら、テストいたします。
また、お願いいたします。
このサイトは補足を一度しか書けないので、お礼の覧に報告を書きます。
やはりうまく動きません。
0.フォントは全て、指定のフォントに置き換わりました。(日本字はMS明朝、英字はTimes New Roman)
日本字は指定の大きさ 10.5 に変わりました。しかし、英字は12 にしたいのに、日本字と同じ大きさ 10.5 になってしまうのです。
最後に、エラー表示が出て、デバッグを指定すると(.Execute Replace:=wdReplaceAll)と表示されます。
1.このマクロは、選択部部のみを対象とするのではなく、選択部分以後を対象とします。
お勧めに従い、最後の一字のみを指定してみましたが、最後が日本字であっても、英字であったも同じ結果/エラーなのです。
2.止まった行: .Execute Replace:=wdReplaceAll このコマンドは何を現しているのでしょう。私は意味を分からずに、丸写しで使ったのです。「恥!!!」
よろしくご援助のほどをお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Wordマクロで指定したフォルダ名に保存する方法について 8 2022/12/13 11:35
- Excel(エクセル) エクセルマクロで教えてください 2 2022/05/04 09:07
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでツールバーに「縮小...
-
Powerpointでランダムな数字の...
-
マクロについて2
-
エクセルのマクロでSelection.S...
-
【エクセルマクロ】合計値が指...
-
複数のデータ系列の線の太さを...
-
cellsで特定の離れた範囲を選択...
-
Windows7, MSWord2007 でマクロ...
-
エクセル2007 テキストボ...
-
選択範囲に黒の格子を付けるマクロ
-
エクセル vba クリック~離し...
-
excel2000 条件付書式5つ
-
excelファイルに使われているVB...
-
マクロエクセルのブロック解除
-
エクセルの指数を無効にしたい
-
エクセルファイルを自身のファ...
-
EXCEL VBAで声を出すマクロ
-
VB.NetでExcelファイルをAccess...
-
VBA マクロ実行時エラー’1004Ra...
-
マクロでマクロを削除する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のデータ系列の線の太さを...
-
エクセルでツールバーに「縮小...
-
cellsで特定の離れた範囲を選択...
-
ファイル名を今日の日付、時刻...
-
Powerpointでランダムな数字の...
-
VBA[Private Sub]のコードをシ...
-
エクセルシートをまとめて印刷...
-
エクセル2007 テキストボ...
-
別ブックからユーザーフォーム...
-
ピボットグラフの書式の固定に...
-
VBAを使ってエクセルシート...
-
エクセルのマクロでSelection.S...
-
最初の1回のみにボタンクリッ...
-
VBAに詳しい方教えてください。
-
VBAをVBに変換する方法
-
エクセルワークシート上に印刷...
-
【ExcelVBA】クエリの更新とピ...
-
Pictures.Insertメソッド⇒Shape...
-
エクセルVBAで、画像の倍率を知...
-
エクセル vba クリック~離し...
おすすめ情報