• 締切済み

マクロで、改ページがうまく認識されません

マクロで、改ページがうまく認識されません 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

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 お書きになったコードには、分かりにくい部分があります。 >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)
回答No.1

>それがない時は、そのひとつ手前の改ページを最後の改ページとみなすようです。 そういうものだと思いますよ。 だって、改ページ後に印刷するものがない状況になってしまいますから... >何か解決策がありましたら、お教え願います。 どうしてもというのであれば、改ページの次にダミーのデータを入れるか? 逆にコピー場所を最終改ページ位置でなく最終行+1にしておいて 改ページマーク追加後に貼り付けするとかすればいいのでは?

関連するQ&A

専門家に質問してみよう