[[20050131171836]] 『印刷枚数を知りたい』(Ayu) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『印刷枚数を知りたい』(Ayu)
 こんにちは。ヘルプやいろいろなサイトを見てみたのですが解決できない問題が
 あったので、またアドバイスをお願いします。

 あるフォルダの中にいくつかエクセルファイルが存在します。
 それら全てを印刷すると、何ページ印刷されるかを調査しなくてはいけない
 業務が定例的にあるのです。
 (今は1つ1つ印刷プレビューして、加算しているのです。時間がかかります)

 ページ数カウントを自動で行うマクロを作成したいのですが、ファイルの印刷枚数は
 どのようにすれば取得できるのでしょうか?教えてください。
 よろしくお願いいたします。

 検証不足?かもしれません。。。
どうでしょう??
Option Explicit
Sub てすと()
Dim Wh As Worksheet
Dim x As Long
For Each Wh In Worksheets
    x = (Wh.HPageBreaks.Count + 1) * (Wh.VPageBreaks.Count + 1)
    MsgBox x
Next
End Sub
(SoulMan)

 あくまで参考程度で考えて欲しいのですが・・・。
"C:\test\"というフォルダのエクセルブックを対象にする例。
ルーチン自体はINAさんのもののパクリ。
 Sub Page_Count()
     Rem TEST_20050131
     Dim MyFileName As String
     Dim MyDir As String
     Dim MyBook As Workbook
     Dim MyCount As Long
        MyDir = "C:\test\"
        MyFileName = Dir(MyDir & "*.xls", vbHidden + vbSystem)
        MyCount = 0
        Do
            Set MyBook = Workbooks.Open(MyDir & MyFileName)

            With MyBook
                .Names.Add _
                    Name:="COUNTP", _
                    RefersToR1C1:="=GET.DOCUMENT(50)+NOW()*0"
                For Each sh In .Worksheets
                MyCount = MyCount + sh.[countp]
                MsgBox MyCount
                Next sh
                .Names("COUNTP").Delete
                .Close SaveChanges:=False
                MyFileName = Dir()
            End With
        Loop Until MyFileName = vbNullString

 End Sub
 
本当はHPageBreaks、VPageBreaksで取得するのでしょうけど。
GET.DOCUMENTを使ってしまうあたりが「みやほりん的」である。
(みやほりん)


 ありがとうございます。
 加えて質問なんですが、やはり全てのファイルを開かなくては
 印刷ページ数というものを取得することは不可能でしょうか?
 カウントするファイル数が50ほどあるので、全てを開いて検証すると
 レスポンスが悪いのです。
 やはり、無理なのでしょうか・・・。

 そして・・・
  :="=GET.DOCUMENT(50)+NOW()*0"
 この式の意味がわからないのです。無知ですいませんm(_ _"m)ペコリ
 ヘルプでGET.DOCUMENTを探してもみつからないのですが・・・
 ヘルプの使い方が甘いのでしょうか?
 (Ayu)

 ファイルを開かない方法もあるのかもしれませんが、残念ながら私には分かりません。
一応下記も参考にされたし。
[XL2002] 印刷されるページの総数を調べる方法
http://support.microsoft.com/default.aspx?scid=kb;ja;408042&Product=excelJPN
 
マイクロソフトでもGET.DOCUMENTを紹介していますが、ヘルプには解説ありません。
[XL95] 印刷されるペ-ジの総数を調べる方法
http://support.microsoft.com/kb/402754/JA/
 
上記で紹介のExecuteExcel4Macroではシートをアクティブにする必要がある分、
反応が遅いような気がしたので、私はブックに名前定義して対処してます。
ヘルプにも載っていないようなものを使うのはかなわん、ということなら、
GET.DOCUMENTの使用は切り捨てたほうがいいでしょう。
もともと参考出品のつもりで投稿したものです。
本道はHPageBreaks、VPageBreaksで取得する方法だと思います。
(みやほりん)

 丁寧なご回答ありがとうございました。
 やはり、無理ですよね。
 ファイルアイコンを右クリックして「印刷」を実行しても絶対一度ファイルが
 開かれるってことは、開かないと情報は得られないということですもんね。
 薄々そんな気はしました。。。

 ありがとうございました。
 みやほりんさんとsoulmanさんの方法を両方作成してレスポンスの良いほうで
 作業をすすめたいと思います。
 (Ayu)

 HPageBreaks、VPageBreaksを使って、印刷枚数取得をしてみました。
 がっ!なぜか、ほとんどは正確に印刷プレビューの枚数と同じになるのですが
 たまに、違うときがあるのです。
 全然1ページに収まっているのに、Vpagebreaksの値が「1」になっているコトが…
 こんな事象を経験されたことはありませんか?
 原因をご存知の方がいらっしゃいましたら教えてください。

 (みやほりんさんの方法だと、ちゃんと上手くカウントされるので現在は
 こちらを利用して作業をしています。
 しかし、なんでVpagebreaksだと上手くいかないのかが気になったのです。)

 (Ayu)


 多分、おそらく、もしかしたら・・・・プリンタドライバーの関係かも???
 ページに余裕があるデータの場合は 0 が返りますけど、
 ぎりぎりにした場合 1 が返りますね。
 (川野鮎太郎)

 なるほど・・・。では解決不能ですね。。。
 ありがとうございました。
 (Ayu)

 一応確認できる範囲で検証してみました。
・手動改ページ位置調整などで垂直改ページが一回設定されていて、
・印刷範囲の設定で印刷範囲を限定しており、
・印刷範囲外に入力が残っている
という状況で「1」が返りました。うむぅ。想定外。
このような状況だけではないかもしれませんが・・・・。
調べた限りではGET.DOCUMENT(50)は改ページではなくて
「実際に印刷されるページ数」を取得しているということ「らしい」です。
(みやほりん)


 「実際に印刷されるページ数」が知りたいので、今後はGET.DOCUMENT(50)を利用
  します。時と場合により、ページ数が異なるのは・・・困ってしまうので。
  みなさん。ありがとうございましたm(_ _"m)ペコリ

  (Ayu)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.