Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : その他)
正しく印刷ページ総数を取得できない
投稿日時: 20/09/30 18:51:50
投稿者: ぱーまん

指定したフォルダ(サブフォルダ含む)のExcelファイル一覧を取得した後、
取得したExcelファイルを1つずつ開き、非表示シートは無視して、
表示シートのみ印刷ページ総数を取得するマクロを作成しています。
ですが、マクロを実行するたびに取得するページ総数が変わってしまいます。
原因について何か分かれば、ご教示ください。
 
Function 印刷ページ総数取得(ファイル名) As Long
 Dim ページ As Long
 Dim シート As Worksheet
 Dim ブック As Workbook
 
 ページ = 0
 Set ブック = open(ファイル名)
 
 For Each シート In ブック.Worksheets
  If シート.Visible Then
   ページ = ページ + シート.PageSetup.Pages.Count
  End If
 Next
 
 印刷ページ総数 = ページ
End Function

回答
投稿日時: 20/09/30 20:43:49
投稿者: simple

ネット検索で、
"正しく印刷ページ総数を取得できない"
と検索すると関連記事があるようです。
参考になりませんか?

投稿日時: 20/09/30 21:40:19
投稿者: ぱーまん

ご回答ありがとうございます。
下記のように改ページプレビューを入れましたが、正しく取得できませんでした。
 
For Each シート In ブック.Worksheets
 シート.Activate ←追加
 ActiveWindow.View = xlPageBreakPreview ←追加
 If シート.Visible Then
  ページ = ページ + シート.PageSetup.Pages.Count
 End If
Next

回答
投稿日時: 20/09/30 23:40:26
投稿者: simple

昔の仕組みを使った以下のものではどうでしょう。
ページ数 = Application.ExecuteExcel4Macro("GET.DOCUMENT(50,""" & Sheets(i).Name & """)")

投稿日時: 20/10/01 09:30:03
投稿者: ぱーまん

ご回答ありがとうございます。
ご提示いただいた内容を試してみましたが解決しませんでした。
 
質問の補足ですが、
・処理するページ数を取得したいExcelファイルは1000ファイルくらいあります。
・正しいページ数を取得する時もあれば、正しく取得できない時がありますが、共通点が無く切り分けができていません。
・DoEvents、sleepを入れてみても解決しませんでした。

回答
投稿日時: 20/10/01 20:46:17
投稿者: WinArrow
投稿者のウェブサイトに移動

別方法のページ数の取得方法を紹介します。
 
Dim wsht As Worksheet
 
    Set wsht = ActiveSheet
    With wsht
        Debug.Print (.VPageBreaks.Count + 1) * (.HPageBreaks.Count + 1)
    End With
 
 
 
 

回答
投稿日時: 20/10/01 20:48:36
投稿者: WinArrow
投稿者のウェブサイトに移動

追加レス
 
全部の合計取得 → シートごと取得
に変更して、検証することをお勧めします。

回答
投稿日時: 20/10/02 17:16:31
投稿者: mattuwan44

 >ですが、マクロを実行するたびに取得するページ総数が変わってしまいます。
 
連続して実行して結果が変わるということですか?
 
誰かが開いてみて上書き保存したとかじゃないですよね?
 
プリンターが変わっても、ページ数が変わることがあるけど、
そういうことではないですよね?

投稿日時: 20/10/02 20:32:12
投稿者: ぱーまん

諦めました。