投稿日 | : 2004/02/22(Sun) 03:13 |
投稿者 | : 花ちゃん |
Eメール | : |
URL | : |
タイトル | : 試してみましたが! |
Option Explicit
Private Sub Command1_Click()
' On Error Resume Next
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim PrintPage As Integer
Dim i As Long
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\test.xls")
For Each xlSheet In xlBook.Worksheets
PrintPage = PrintPage + fGetPage(xlSheet)
Next
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
MsgBox "印刷ページ総数 : " & PrintPage & " Page"
End Sub
Private Function fGetPage(ByVal mySheet As Worksheet) As Integer
Dim HPageCount As Integer, VPageCount As Integer, TotalPage As Integer
If mySheet.UsedRange.Address = "$A$1" And _
IsEmpty(mySheet.Range("$A$1").Value) Then
TotalPage = 0
Else
HPageCount = mySheet.HPageBreaks.Count '横の改ページ数取得
VPageCount = mySheet.VPageBreaks.Count '縦の改ページ数取得
'横の改ページがない場合は縦の改ページ数+1が総ページ数になる
If VPageCount = 0 Then
TotalPage = HPageCount + 1
Else
HPageCount = HPageCount + 1
VPageCount = VPageCount + 1
TotalPage = HPageCount * VPageCount
End If
End If
fGetPage = TotalPage
End Function
これでは、正確なページ数は取得できないようです。
垂直の改ページがある場合で印刷するものがない場合もカウントしてしまいます。
たとへば、一行目だけに2枚に渡るデータが記入されていて、水平方向に改ページが
ある場合等は右側にデータが入っていなくてもカウントしてしまう。
正確には改ページの範囲を取得してその範囲にデータが記入されているか取得する
必要があるようですが、その方策は見つかりません。
通常はそのようなレイアウトで印刷しないとは思うのですが、又用紙設定等でどのように
なるかテストする必要があるかと思います。