Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


40097 / 76732 ←次へ | 前へ→

【41736】Re:改ページ設定
発言  ichinose  - 06/8/21(月) 18:42 -

引用なし
パスワード
   ▼トホホ さん:
こんばんは。

>マクロを使用して約3,000行からなる帳票を作成しました。
>1ページの印刷行数を指定して印刷することは可能でしょうか?
>またそれが不可能であれば、リストの左端列(A列)などに行番号を振っておくなどしてもよいのですが。
>いつも手作業でページ割をしているのでいざ印刷するとなるとかなりの時間がかかっています。
>どうかよい方法があれば教えてください。

600行ぐらいでテストしましたが、遅いですよ!!
Excelは、印刷は不得意ですからねえ・・・。

新規ブックの標準モジュールに
'===============================================================
Sub main()
  With Range("a1:o600")
   .Formula = "=row()*column()"
   .Value = .Value
   MsgBox "サンプル作成"
   Application.ScreenUpdating = False
   Call pr_settei(.Cells, 60)
   Application.ScreenUpdating = True
   End With
  ActiveSheet.PrintPreview
End Sub
'==============================================================
Sub pr_settei(prng As Range, intervalline As Long)
'印刷のぺージ設定を行う
'input prng-----印刷設定を行うセル範囲
'   intervalline---改ページを行う間隔(行数)
  Dim ar As Range
  Dim sht As Worksheet
  Set sht = prng.Parent
  With sht
   .Parent.Activate
   .Activate
   .Cells.PageBreak = xlPageBreakNone '手動設定の解除
   ActiveWindow.View = xlPageBreakPreview
   .PageSetup.Zoom = 100
   .PageSetup.PrintArea = ""
  
   For idx = 1 To prng.Rows.Count Step intervalline
    Set ar = prng.Range(idx & ":" & idx + intervalline - 1)
    .PageSetup.PrintArea = ar.Address
    Call VDRGOFF(sht, ar) 'オートマチックの解除
    Call HDRGOFF(sht, ar)
    .HPageBreaks.Add .Range(.Cells(ar.Row + ar.Rows.Count, 1), .Cells(ar.Row + ar.Rows.Count, ar.Columns.Count))
    Next
   ActiveWindow.View = xlNormalView
   .PageSetup.PrintArea = prng.Address
   End With
End Sub
'====================================================================
Sub VDRGOFF(sht As Worksheet, rng As Range)
  On Error Resume Next
  Dim vv As VPageBreak
  For Each vv In sht.VPageBreaks
   If Not Application.Intersect(vv.Location, rng) Then
     vv.DragOff xlToRight, 1
     End If
   Next
  On Error GoTo 0
End Sub
'===================================================================
Sub HDRGOFF(sht As Worksheet, rng As Range)
  On Error Resume Next
  Dim hh As HPageBreak
  For Each hh In sht.HPageBreaks
   If Not Application.Intersect(hh.Location, rng) Then
    hh.DragOff xlDown, 1
    End If
   Next
  On Error GoTo 0
End Sub


これでmainを実行してみてください。

サンプルコードmainでは、

セル範囲A1〜N600までに適当なデータを配置した後、

60行おきに改ページします。

ページ設定が用紙サイズA4レベルでは、
それぞれのページは縮小されているはずです。

ということがしたいのでしょうか?


試してみてください。

1 hits

【41723】改ページ設定 トホホ 06/8/21(月) 15:10 質問
【41724】Re:改ページ設定 ハチ 06/8/21(月) 15:37 回答
【41725】Re:改ページ設定 トホホ 06/8/21(月) 15:48 お礼
【41736】Re:改ページ設定 ichinose 06/8/21(月) 18:42 発言
【41761】Re:改ページ設定 トホホ 06/8/22(火) 9:39 お礼
【41766】Re:改ページ設定 ichinose 06/8/22(火) 12:35 発言
【41773】Re:改ページ設定 トホホ 06/8/22(火) 13:53 質問
【41783】Re:改ページ設定 Kein 06/8/22(火) 16:56 回答
【41790】Re:改ページ設定 ichinose 06/8/22(火) 22:08 発言

40097 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free