• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PageBreaks.Countと印刷範囲の設定について)

Excelマクロで用紙サイズに合わせたオートフィット印刷をする方法について

このQ&Aのポイント
  • Excelマクロにて、用紙サイズに合わせた縦横1x1のオートフィット印刷をする方法について質問です。
  • 質問者が参考書を元に作成した条件式では、印刷範囲の設定が実施されているファイル・シートにおいて、拡大処理ループが正常に動作しない問題が発生しています。
  • 質問者は、印刷範囲の設定が原因である可能性があると考えていますが、他にも問題があるのか疑問に思っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

> とりあえず400%に拡大させて、改ページプレビューで1×1を状態に > することで、400%から適当な拡大サイズに変更させる処理... そのとおりです。 > エラーとなるケースが頻発します。 On Error Resume Next としてエラーを無視させてますのでエラーで、停止 することはないはずです。 期待したとおりの動作にならない...ということをエラーと表現されたので しょうか?   > .VPageBreaks(1).DragOff xlToRight,1 上記の書き方をみると、私が提示したコードをそのまま試されているわけ ではなさそうです。Excel2002 環境でテストした限り、問題はなさそう なので、ご自分で書かれたコードの提示、シート内のデータの状況などの 説明がなければ何とも言えません。 このような再質問でしたら、まずは私が提示したものが正常に動作するか 確認し、その結果を教えて下さい。 > Vが垂直方向、Hが水平方向のような気がするのですが、 そのとおりです。 > そうすると xlToRightとxlDownが反対って単純に思ってしまいました。 垂直と水平のとらえ方が逆です。 改ページプレビューにして試してみてください。垂直改ページ(縦の線)は 左右に動かし、水平改ページ(横の線)は上下に動かします。

skyhot
質問者

お礼

大変失礼しました。 完全に『On Error Resume Next』を見落としのまま作業してしまいました。 ご指摘のとおり、 『On Error Resume Next』を記述した結果、思い通りの動作を確認することができました。色々と質問の不手際もありながら、親切にご回答してもらえたことに感謝いたします!。 実は、コード作成・実行は会社のパソコンで実施。セキュリティ上そのデータを社外持ち出せず、また掲示板への書き込みも禁止されていることから、家から別のパソコンで質問させてもらっていたため、質問に具体的なコードがしずらかったため。大変ご迷惑おかけしました。 >.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1 の記述をそのまま当初引用させてもらったのですが、 「RegionIndex:=1」⇒「regionIndex:=1」とコード認識ができていないようだったので、VBAヘルプの記述を参考にして、変更させて利用させてもらいました。 改ページの水平、垂直方向のご回答もなるほどと理解することができ、大変勉強になりました。 今後も機会がありましたら、また親切なご回答よろしくお願いします。次回は、コード等もきちんと提示して質問できるような形をとりたいと思います。お手数おかけしました。感謝!

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

何度か試すとうまくいかない場合がありましたので、#2 のコードを一部 訂正いたします。 ' // DragOffを使うため改ページプレビュー表示モードにする ActiveWindow.View = xlPageBreakPreview       ↓訂正 ' // DragOffを使うため改ページプレビュー表示モードにする ActiveWindow.View = xlNormalView ActiveWindow.View = xlPageBreakPreview

skyhot
質問者

お礼

回答ありがとうございます。 難しいので、少し追加で教えてください。 要は、とりあえず400%に拡大させて、改ページプレビューで1×1を状態にすることで、400%から適当な拡大サイズに変更させる処理と見てよろしいでしょうか? それと .VPageBreaks(1).DragOff xlToRight,1 .HPageBreaks(1).DragOff xlDown,1 と入力しましたが、エラーとなるケースが頻発します。この2行の順序を並び替えたりもしましたが、1行目でエラーとなるケースがほとんどです。しかし、エラーとならず思ったとおりの処理になることもあるので、何が悪いのか判断がつかずにいます。縦方向は1ページ分なのに横方向は2ページ状態でエラー、、、またその反対と、、、 追加で教えてもらえると幸いなのですが、Vが垂直方向、Hが水平方向のような気がするのですが、そうするとxlToRightとxlDownが反対って単純に思ってしまいました。基本的に素人が本を読みながら独学で、作っていますので、ヘルプで確認しましたがどうも理解しづらいのです。 もし、よろしければご面倒ですが、噛み砕いた説明、もしくは参考サイト等アドバイス頂ければとおもいます。引き続きになりもうしわけございません。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

> 途中のプレビューを見せたくないと思っています。 Application.ScreenUpdating = False にしてしまえば良いと思います。 ご質問分にあるものとは多少ロジックが異なりますが、こんな感じで できるかと.... Sub MaxSizePrint()   Dim lViewModeBackup As XlWindowView        On Error Resume Next   ' // 現在の表示モードを退避しておく   lViewModeBackup = ActiveWindow.View   ' // 画面の動きをユーザーには見せない   Application.ScreenUpdating = False   With ActiveSheet     ' // とりあえず Excelで指定可能な最大印刷倍率にする     .PageSetup.Zoom = 400     ' // DragOffを使うため改ページプレビュー表示モードにする     ActiveWindow.View = xlPageBreakPreview     ' // 改ページを印刷領域の外にドラッグ     .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1     .HPageBreaks(1).DragOff Direction:=xlDown, RegionIndex:=1     ' // 表示モードを元に戻す     ActiveWindow.View = lViewModeBackup   End With      ' // 印刷処理等をここで   Application.ScreenUpdating = True End Sub <<参考: [DragOff メソッド] Excel VBA へプル引用>> このメソッドは、マクロ記録機能用です (適用できるのは、表示が改ページ プレビューのときだけです)。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

> PageBreaks.count が0 を指したままになり、増加せず上限400%まで > ループ処理をしてしまいます。 Zoom プロパティーを更新したあと、改ページプレビューを実行するなどして Excel に印刷レイアウトを再計算させない限り、HPageBreaks や VPageBreaks の Count プロパティーは更新されないようです。 > とりあえず設定をクリアしたら、countがきちんと増えて... 上記推論の根拠のひとつです。

skyhot
質問者

お礼

回答ありがとうございました。 やはりそうなのですね。 >改ページプレビューを実行するなど ユーザーへはボタン押したらノンストップで印刷まで持っていき、 途中のプレビューを見せたくないと思っています。 「など」ということだったのでその他に、良い手段をご存知であれば 引き続き回答いただければ幸いです

関連するQ&A