ワード文章をページ単位でテキストファイルに書き出す
そんな動作を行うマクロをデバッグしてみました。
下記、いつもの デバッグ動画です
youtu.be
https://youtu.be/FXNjGsLen18
目次
00:00 あいさつ、やりたいこと
00:50 1.ページ選択のテスト
03:15 2.ページをコピー新規word文章に貼り付けテキスト保存
07:55 3.最終ページ番号の取得
08:52 4.単体のコードを結合してテスト
11:17 元のソースコードをテストしてみた
#WordVBA #マクロ #デバッグ #ページ単位 #テキストファイル #MSWord #ActiveDocument #Bookmarks #Page #Select
0.あいさつ、やりたいこと
知恵袋の質問
detail.chiebukuro.yahoo.co.jp
をデバッグしてみた
単体テストから入る
1.ページ選択のテスト
00:50 1.ページ選択のテスト
Sub 単体1_ページを選択する() Dim p As Integer p = InputBox("テストページ", "ページ数入力", "1") 'ページ移動 カーソル移動 'wdGoToAbsolute 1 絶対位置 Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=p 'ページ選択 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14267908039 の ' anna*******さん回答 ' txt = ActiveDocument.Bookmarks("\page").Range 'より ActiveDocument.Bookmarks("\page") 引用 'カーソルがあるページ全体が選択された状態になる。 ActiveDocument.Bookmarks("\Page").Select End Sub
2.ページをコピー新規word文章に貼り付けテキスト保存
03:15 2.ページをコピー新規word文章に貼り付けテキスト保存
Sub 単体2_選択範囲をコピーして新規word文章に貼り付けテキスト保存() '選択状態 .Select で選択範囲をコピーして Selection.Copy '新規word文章に貼り付け 'テキスト保存 ' https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12267387607 Documents.Add '新規Document文書追加 Selection.Paste '単純に貼り付け Selection.TypeBackspace '一文字Backspace?消しているが?なぜだろう・・・ ChangeFileOpenDirectory "D:\2022" '保存ディレクトリ?に変更 'DocNum = DocNum + 1 'ファイル名、今回は使用しないのでコメント 'ファイル名だけ指定して、FileFormat:=wdFormatText テキストフォーマットで保存 ActiveDocument.SaveAs FileName:="単テキスト保存テスト.txt", FileFormat:=wdFormatText ActiveDocument.Close '↑で保存したので、閉じる End Sub
3.最終ページ番号の取得
ループで回した時、最後が知りたいので、
最終ページ番号の取得をテスト
07:55 3.最終ページ番号の取得
Sub 単体3_最終ページ番号の取得() Dim p As Integer p = ActiveDocument.Range.Information(wdNumberOfPagesInDocument) MsgBox "総ページ数(最終ページは) " & p & " です" End Sub
4.単体のコードを結合してテスト
08:52 4.単体のコードを結合してテスト
Sub 結合テスト() '1ページから最終ページまでループさせテキストファイルを作成 Dim 最終ページ As Integer 最終ページ = ActiveDocument.Range.Information(wdNumberOfPagesInDocument) Dim p As Integer For p = 1 To 最終ページ 'ページ移動 カーソル移動 'wdGoToAbsolute 1 絶対位置 Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=p 'ページ選択 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14267908039 の ' anna*******さん回答 ' txt = ActiveDocument.Bookmarks("\page").Range 'より ActiveDocument.Bookmarks("\page") 引用 'カーソルがあるページ全体が選択された状態になる。 ActiveDocument.Bookmarks("\Page").Select '選択状態 .Select で選択範囲をコピーして Selection.Copy '新規word文章に貼り付け 'テキスト保存 ' https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12267387607 Documents.Add '新規Document文書追加 Selection.Paste '単純に貼り付け Selection.TypeBackspace '一文字Backspace?消しているが?なぜだろう・・・ ChangeFileOpenDirectory "D:\2022" '保存ディレクトリ?に変更 'p.txt ファイル名だけ指定して、FileFormat:=wdFormatText テキストフォーマットで保存 ActiveDocument.SaveAs FileName:=p & ".txt", FileFormat:=wdFormatText ActiveDocument.Close '↑で保存したので、閉じる Next p MsgBox "処理終了" End Sub
元のソースコードで動く?ので
>2ページに跨いで表が作成されているところの変換がおかしくなっていることが判明しました
↑この表が、何かやっているのかなぁ?
単純な
ActiveDocument.Bookmarks("\page").Range.Copy
だと、ページをまたぐのか?
現物のまたいだ表、データが無いと、なんとも言えないのかなぁ・・・と逃げてみたり(ぉぃぉぃ・・・)
2022/09/12 追記
原因わかりました
ActiveDocument.Bookmarks("\Page").Select
だと、
セル内で改行して次のページに[またいでいる]と
選択範囲が広がっていて、
それを.Copyしているので、テキストに落とした時に、目的の動作をしないみたいです。
※ページマタギの表を確認してみてください、
同じように、
表のセルの中で改行
ページをまたいでいると思います。
これが、原因かなぁ・・・
youtu.be
https://youtu.be/IMXD_oJXr7Q
↑追加の動画解説を見て、デバッグの抜け、不具合のパターンを確認してみてください。
※おじさんのデバッグが甘かったです・・・
で、対策は。
わかりません。※ぉぃぉぃ
原因だけ、お知らせします。
※※単純な ActiveDocument.Bookmarks("\Page").Select 以外を考えないといけないので、難しいかも・・・