|
▼nn さん:
こんにちは。
> '↓ココで、「アプリケーション定義エラー」が発生する
> Debug.Print Err.Description
エラーが発生するのはその行で間違いありませんでしょうか。
> .HPageBreaks.Add Before:=Cells(arrPgBreakRow(i), 1)
^^^^^
Cells オブジェクトが上位のオブジェクトから参照されていないのが
エラーの原因だと思われるのですがいかがでしょう。
(「.」がついていませんよね)
>データが縮小されて、印刷紙の左上に小さく印刷されます。
こちらについては もう ExcelVBA の問題ですね^^
当方も余り詳しくないので以下は外しているかもしれません。
行については改ページを解除した後、再設定されていますが、
列については解除されたままですよね。
例えば 100% の状態でA〜G 列までが印刷されるとしてデータが H 列まであったとすると、
ご提示されたコードですと、縮小印刷されてしまいませんでしょうか。
縮小して1枚に納めるか、それとも列も考慮して改ページを設けるかは
nn さんの仕様次第だと思います。
>自分が作成したコードは冗長で、あまり良いコードだと思えません。
>上記のことをうまく実現するロジック等、教えていただけませんでしょうか。
Private Sub setpgBreak2()
'要参照 Microsoft Excel x.x Object Library
Dim xlsApp As Excel.Application
Dim xlsWkb As Excel.Workbook
Dim aryPgBreakRow() As Variant
Dim aryPgBreakCol() As Variant
Dim i As Long
Dim j As Long
aryPgBreakRow = Array(10, 20, 30, 40)
aryPgBreakCol = Array(5, 10)
Set xlsApp = CreateObject("Excel.Application")
Set xlsWbk = xlsApp.WorkBooks.Open("D:\test.xls")
'xlsApp.Visible = True
'改ページプレビュー表示
xlsApp.Windows(1).View = xlPageBreakPreview
With xlsWkb.Sheets("シート名")
'シートのすべてを印刷範囲に設定する
.PageSetup.PrintArea = ""
'すべての改ページを解除
.ResetAllPageBreaks
'改ページ設定
For i = 0 To UBound(aryPgBreakRow)
.HPageBreaks.Add Before:=.Cells(aryPgBreakRow(i), 1)
Next
For j = 0 To UBound(aryPgBreakCol)
.VPageBreaks.Add Before:=.Cells(1, aryPgBreakCol(j))
Next
End With
xlsWkb.Close True: Set xlsWkb = Nothing
xlsApp.Quit: Set xlsApp = Nothing
End Sub
|
|