• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MS Wordのマクロで自動改ページする方法)

MS Wordのマクロで自動改ページする方法

このQ&Aのポイント
  • MS Wordのマクロを使って、文字列の特定の位置で自動的に改ページする方法について教えてください。
  • WordのバージョンはOffice2003で、初心者です。マクロを作成しましたが、成功したりしなかったりします。原因が分からないので、ご指摘や修正方法を教えていただきたいです。
  • マクロを実行すると、文字列内の特定の位置で自動的に改ページし、改ページされた回数も表示されるようにしたいです。

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

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

マクロを使わないと駄目なの? 質問にあるマクロも意味不明な部分があります。 [マクロ記録]をとって、それをアレンジしたほうが良いのでは? Wordの基本的な部分を知っていて、マクロ処理しているのならば 説明しやすいのですが、他の回答もつかないのは意味不明部分が 多いからでは。 一般機能の[置換]で以下の処理をしてみてから、使いやすく編集 をマクロで作ってみてください。 [置換]ダイアログをだし、[あいまい検索]のチェックをはずす。 [検索する文字列] : x [置換後の文字列] : ^m^& [すべて置換]ボタンで置換したら、[閉じる]。 不要な改ページがあったら削除。 「^m^&」の意味は[改ページ+検索する文字列]になっています。 なので、xの前に強制的に改ページが入ります。 質問の例としての文字列「xabcxdefgxhijk・・・」の場合だと、 最初のxabcの前にも改ページが入ってしまいますので、それだけ 削除することになります。 マクロ処理するのなら、これを前提に最初のxを除く部分で置換 するようなマクロを作ってみてはいかが。

chamuji_vv
質問者

お礼

マクロを使わずにやりたかったことができました!ありがとうございます。

その他の回答 (1)

回答No.2

(改ページ) abc(改ページ) defg(改ページ) hijk のように、行頭のxがなくなったり、最初に改ページが挿入されたりでよければ 以下のように書き換えればよさそう。 Sub kaipage2() Dim blnFound As Boolean Dim rngContent As Range Dim intCount As Integer blnFound = True Set rngContent = ActiveDocument.Content intCount = 0 Selection.HomeKey Unit:=wdStory ' カーソルを現在のストーリの先頭に移動 Do While blnFound = True With rngContent.Find .ClearFormatting .Wrap = wdFindContinue .Text = "x" .Execute Forward:=True If .Found = True Then '見つかった場合、xを選択して改ページで置換。結果、xは削除される Selection.Find.Execute Selection.InsertBreak Type:=wdPageBreak intCount = intCount + 1 Else blnFound = False End If End With Loop MsgBox (intCount & "個見つかりました。") End Sub chamuji_vvさんのプログラムのネックは、xを$に置き換えている点、 xがあってもなくても改ページする点、マクロ実行時のカーソル位置 により結果が変わってしまう点でしょう。 どうしても >xabc(改ページ) >xdefg(改ページ) >xhijk・・・ の形式にこだわるなら、現在の方法を少し変更するだけでは無理なような 気がします。まあ、僕もWordのVBAに関しては初心者に少し毛が生えた位なので、 できませんと言い切ることはできませんが。 例えばこんな感じでどうでしょうか? Sub kaipage3() Dim strText As String Dim bFound As Boolean Dim i As Long, j As Long, intCount As Long strText = ActiveDocument.Content.Text Selection.HomeKey Unit:=wdStory ' カーソルを現在のストーリの先頭に移動 i = 1: j = 1 Do While i > 0 i = InStr(j, strText, "x", vbBinaryCompare) If i > 1 Then Selection.MoveRight Unit:=wdCharacter, Count:=i - 1 Selection.InsertBreak Type:=wdPageBreak strText = ActiveDocument.Paragraphs(ActiveDocument.Paragraphs.Count).Range.Text End If If i > 0 Then intCount = intCount + 1 j = 2 Loop MsgBox (intCount & "個見つかりました。") End Sub

chamuji_vv
質問者

お礼

どこが問題かまで指摘していただきありがとうございます。 とても勉強になりました。また何かございましたらよろしくお願いいたします。

関連するQ&A