[リストへもどる]
一括表示

投稿時間:2004/02/21(Sat) 22:04
投稿者名:tak
Eメール:
URL :
タイトル:
特定のエクセルファイルのページ総数取得方法
こんばんわ。いつも参考にさせてもらっています。

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

投稿時間:2004/02/21(Sat) 23:34
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 特定のエクセルファイルのページ総数取得方法
> 単にシート数の取得ならば可能なのですが、実際に印刷した場合の「印刷枚数」はどうすれば
> 取得可能なのでしょうか??

そのシートをどのように印刷するのか設定しないと印刷枚数は決まらないと思います。
同じシートでもA4横向きと縦向きでは枚数も変わってくるかと思います。
従ってまず、どのように印刷するのか、ページ設定をして下さい。
その上で水平方向の改ページを取得すれば印刷枚数が判ります。
垂直方向の改ページ数もプラスして下さい。
両方とも改ページ数 + 1 が印刷枚数になるようです。

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

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

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

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

投稿時間:2004/02/22(Sun) 10:14
投稿者名:tak
Eメール:
URL :
タイトル:
ありがとうございましたm(_ _)m
おはようございます。レスどうもありがとうございましたm(_ _)m

ご紹介いただいたマイクロソフトのサポート情報拝見いたしました。
「印刷 枚数 取得」でWEB検索してもHITしなかったのですが、
検索ワードがまずかったみたいですね。
これを複数シートあるエクセルファイル対応にしてくださったソースも拝見いたしました。
なるほど。ページ総数取得するには改ページを取得すればいいんですねぇ・・。
気付きませんでした。

ちなみに印刷はA4縦で行います。家にはプリンタがなくこのソースを試せないので、
明日、試そうと思います。

エクセルを開いて全シートを選択してなんとかして印刷プレビュー情報からページ数を
取得しようと奮闘していた日々が勿体無く感じます。

> これでは、正確なページ数は取得できないようです。
> 垂直の改ページがある場合で印刷するものがない場合もカウントしてしまいます。
> たとへば、一行目だけに2枚に渡るデータが記入されていて、水平方向に改ページが
> ある場合等は右側にデータが入っていなくてもカウントしてしまう。

正常に取得できないケースがあるなんて、
ある意味マイクロソフトのサポート情報のバグ(?)ですね、これw