- 締切済み
マクロで、改ページがうまく認識されません
マクロで、改ページがうまく認識されません Excel2002を使用しています。 1ページ内に収まるように作った「内訳明細書」の型があり、 複数ページに渡る時は、ボタンを押せば新しいページが下に追加される…という マクロを作りたいと思い、いろいろ調べながらやってみたのですがうまくいきません。 以下のように、 「シートの最後の改ページの次の行に、原紙シートからコピーしたフォームを貼り付ける」 としてみたのですが、 最後の改ページの後ろ側に何かしらのデータがある時は ちゃんと最後の改ページを認識するのに、それがない時は、そのひとつ手前の 改ページを最後の改ページとみなすようです。 これはこういうものなのでしょうか? 何か解決策がありましたら、お教え願います。 Sub 改ページを入れる() Sheets("内訳明細書").Select p = ActiveSheet.HPageBreaks.Count '改ページの総数 L = ActiveSheet.HPageBreaks(p).Location.Row '最後の改ページの行 Sheets("原紙").Select Rows("1:26").Select Selection.Copy Sheets("内訳明細書").Select Rows(L).Select ActiveSheet.Paste Range("A7").Select Sheets("原紙").Select Application.CutCopyMode = False 'コピーモードを解除 Range("A1").Select Sheets("内訳明細書").Select ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate '最後のセルをアクティブにする 最終行 = ActiveCell.Row + 1 'アクティブセルの行番号(+1) Worksheets("内訳明細書").Rows(最終行).PageBreak = xlPageBreakManual End Sub
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 お書きになったコードには、分かりにくい部分があります。 >Rows("1:26").Select 全列を入れるのですか?手作業では、このようなことはしますが、VBAでは、明示的な範囲のほうがよいのではないか、と思います。 >L = ActiveSheet.HPageBreaks(p).Location.Row '最後の改ページの行 最後の改ページとありますが、通常、自動改ページしかありませんから、データ最後のページになる場所には、改ページは存在しません。 論理的な、印刷ページの終わりが、存在するだけです。 [論理的な印刷ページの最後の行] は、1ページの行数 × ページ数 > Worksheets("内訳明細書").Rows(最終行).PageBreak = xlPageBreakManual わざわざ、手動改ページを入れているのですが、これは、本来、 [論理的な印刷ページの最後の行] があれば、必要ないのではないでしょうか? なお、変数L は、Last の意味のようですから、Lrow にさせていただきました。また、印刷範囲は、削除されていますから、あらためて、 .PageSetup.PrintArea =.UsedRange.Address や .PageSetup.PrintArea =.Range("A1",.Range("A65536").End(xlUp)).Resize(,8).Address '8列目まで広げるということ を最後に入れてもよいと思います。 '------------------------------------------------------ Sub 改ページを入れるR() Dim p As Integer Dim OnePRow As Integer Dim Lrow As Long On Error Resume Next With Sheets("内訳明細書") .PageSetup.PrintArea = "" '一旦印刷範囲を取り去る p = .HPageBreaks.Count '自動改ページの総数 If p > 0 Then OnePRow = .HPageBreaks(1).Location.Row '1ページの行数 Lrow = OnePRow * (p + 1) Else '1ページの時 .Range("A1000").Value = "x" 'データが掛からない場所にダミーを置く Lrow = .HPageBreaks(1).Location.Row .Range("A1000").ClearContents 'ダミー削除 End If Sheets("原紙").Rows("1:26").Copy .Cells(Lrow + 1, 1) 'コピー .Cells(Lrow + 1, 1).Select End With End Sub
- mshr1962
- ベストアンサー率39% (7417/18945)
>それがない時は、そのひとつ手前の改ページを最後の改ページとみなすようです。 そういうものだと思いますよ。 だって、改ページ後に印刷するものがない状況になってしまいますから... >何か解決策がありましたら、お教え願います。 どうしてもというのであれば、改ページの次にダミーのデータを入れるか? 逆にコピー場所を最終改ページ位置でなく最終行+1にしておいて 改ページマーク追加後に貼り付けするとかすればいいのでは?