tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
印刷されるページの総数を調べる方法(VB6.0 応用編) ( No.10 )  [親スレッドへ]
日時: 2007/08/20 14:44
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[エクセル][][]                                                      *
* キーワード:,,,,,                                                               *
***********************************************************************************

元質問:特定のエクセルファイルのページ総数取得方.. - tak  2004/02/21-22:04 No.8071

現在、特定のフォルダに存在するエクセルファイルの「印刷した時の」総ページ数取得処理を
考えています。
自分なりに調査、ネットでの検索を試みたのですが、こういった処理はあまり認知されていない
のか、全然見当たりませんでした・・。
単にシート数の取得ならば可能なのですが、実際に印刷した場合の「印刷枚数」はどうすれば
取得可能なのでしょうか??

-----------------------------------------------------------------------------------
Re: 特定のエクセルファイルのページ総数取.. - 花ちゃん  2004/02/21-23:34 No.8073
-----------------------------------------------------------------------------------
そのシートをどのように印刷するのか設定しないと印刷枚数は決まらないと思います。
同じシートでもA4横向きと縦向きでは枚数も変わってくるかと思います。
従ってまず、どのように印刷するのか、ページ設定をして下さい。
その上で水平方向の改ページを取得すれば印刷枚数が判ります。
垂直方向の改ページ数もプラスして下さい。
両方とも改ページ数 + 1 が印刷枚数になるようです。

# 2/22 1:13 追加
WEBで検索すれば下記のサイトが見つかりましたよ。
http://support.microsoft.com/default.aspx?scid=kb;ja;408042


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枚に渡るデータが記入されていて、水平方向に改ページが
ある場合等は右側にデータが入っていなくてもカウントしてしまう。

正確には改ページの範囲を取得してその範囲にデータが記入されているか取得する
必要があるようですが、その方策は見つかりません。

通常はそのようなレイアウトで印刷しないとは思うのですが、又用紙設定等でどのように
なるかテストする必要があるかと思います。




 [スレッド一覧へ] [親スレッドへ]