質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

2029閲覧

VBAの質問です pagesetup.pages.countの結果が0になる

ken8888

総合スコア17

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2018/09/28 02:40

前提・実現したいこと

(例)VBAでexcelファイルを自動印刷できるコードを書いています。
印刷枚数を取得する機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

あるワークシートにおいて、手動で印刷枚数を確認すると10枚印刷されると表示されるにも関わらず、pagesetup.pages.countで印刷枚数を取得すると0枚となる。

該当のソースコード

VBA

1dim howmanyP as long 2dim ws as worksheets 3 4'中略 5for each ws in worksheets 6howManyP = howManyP + Worksheets(ws.Name).PageSetup.Pages.Count 7Next 8

試したこと

すべてのシートで0枚になるわけではなく、例えばセルA1:Z100のセルの背景色を設定したページにおいて発生します。

手動でそのシートを印刷しようとすると印刷枚数が10枚になりますと出てくるので、pagesetup.pages.countで取得しても同じように10が入ると思ったのですが、0となってしまいます。

いろいろなサイトを調べたのですが、0になる理由がどうしても出てこなかったので教えていただけると嬉しいです。
また、正しく印刷枚数を把握できる代案があればよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

imihito

2018/09/28 04:11

`ws`と`Worksheets(ws.Name)`を使い分ける意味はあるのでしょうか?
ken8888

2018/09/28 08:57

ご指摘ありがとうございます。
guest

回答1

0

ベストアンサー

Excel 2007と2010ではPages.Countにバグがあるようですね。
https://support.microsoft.com/ja-jp/help/2439589

これに該当するか分かりませんが、一応改ページにしてから枚数取得するようにしてみてはどうでしょう。
あとはイミディエイトウィンドに情報を吐いて枚数が正しくないページを見比べることで原因が切り分けられるかもしれません。

細かい点ですが wsの宣言は「Worksheets」じゃなくて「Worksheet」でしょうか。(s無し)

vba

1Dim howmanyP As Long 2Dim ws As Worksheet 3 4For Each ws In Worksheets 5 '改ページ表示 6 ws.Activate 7 ActiveWindow.View = xlPageBreakPreview 8 9 '枚数取得 10 howmanyP = howmanyP + Worksheets(ws.Name).PageSetup.Pages.Count 11 12  'イミディエイトウィンドに各シートの名前と枚数表示 13  Debug.Print ws.Name, Worksheets(ws.Name).PageSetup.Pages.Count 14Next

一応、代案の書き方もありますが、これも正しく取得できないケースがあるので参考までということで。
https://support.microsoft.com/ja-jp/help/2838848

vba

1For Each ws In Worksheets 2 ws.Activate 3 howmanyP = howmanyP + Application.ExecuteExcel4Macro("get.document(50)") 4Next

投稿2018/09/28 03:41

kobac

総合スコア188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ken8888

2018/09/28 04:26

お返事ありがとうございます。 kobacさんの改ページコードを追加したところ、正常に動くようになりました! ありがとうございました!
kobac

2018/09/28 06:55

「質問への追記」でimihitoさんがご指摘されてますが howmanyP = howmanyP + Worksheets(ws.Name).PageSetup.Pages.Count の記述は howmanyP = howmanyP + ws.PageSetup.Pages.Count でいいですね
ken8888

2018/09/28 08:57

そうですね。ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問