|
▼トホホ さん:
こんばんは。
>マクロを使用して約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レベルでは、
それぞれのページは縮小されているはずです。
ということがしたいのでしょうか?
試してみてください。
|
|