• ベストアンサー

ぴったり印刷するエクセルVBAをつくるには

用紙サイズやマージンを指定して、1ページに最大倍率で印刷する方法はないでしょうか?(自動的に) 以前「QNo.2677602 ExcelVBA、印刷ページを事前に知るには 」で教えていただいた i = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") を利用して次の動作をするVBAマクロを作りました。 PageSetupでZoomに100を指定し、1ページに収まるかどうか調べる。 1ページ内の時は1ページを越えるまでZoomを+1し越えたら-1する。 1ページ以上の時は1ページになるまでZoomを-1する。 これで上手くいくと思ったら、動くことは動くのですが、結果は大き過ぎたり小さすぎたりして、後で手作業で調整しなければなりません。 実行速度も非常に遅いです。 うまくやる方法はないものでしょうか? よろしくお願い申し上げます。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。Wendy02です。 >これで上手くいくと思ったら、動くことは動くのですが、結果は大き過ぎたり小さすぎたりして、後で手作業で調整しなければなりません。 やってみる前から言うのは申し訳ないのですが、確か、ページ数取得とページの拡縮とは、同じマクロの中では、二つは同時に成り立たなかったと思います。私が、マクロ関数を使った理由は、通常のVBA(以下のURLの中にあるもの)ですと、ブレやすいので使ったのですが、しかし、いずれにしても両方は無理だったはずです。 Zoom率を計算で割り出して、拡縮側で、一回で決めないと出来ないような気がします。しかし、縮小による視覚的な問題と、印刷ページにするときの丸め誤差が発生するので、マイナスは良いにしても、プラスではみ出てしまうのは防げないような気がしているのです。 以前、同じ質問を受けたことがありますが、そのとき、初めて、その問題に気がつきました。偶然の産物で出来る可能性がないとは言わないけれども、believe_me さんが、試行錯誤するプログラムに対しての協力は惜しまないけれども、私のレベルでは、回答として載せるレベルのものではありません。こちらは、無理だと思ってやるだけの気持ちがありません。ひとつだけ提案としては、印刷した後の実測値を用いることですね。私は、ここらがExcel独自の難しさなんだろうと思います。 以下、このような文面が乗っています。 「逆も真なり」なのです。 http://support.microsoft.com/default.aspx?scid=kb;ja;408042 [XL2002] 印刷されるページの総数を調べる方法 ≪このプロシージャを実行する前に、改ページ位置のセルを画面に表示して、改ページ位置を認識させる必要があります。次のいずれかの操作を 1 度実行します。 ・改ページされているセルを画面に表示 ・ZOOM で縮小したあと元に戻す ・印刷プレビューを実行する ≫

believe_me
質問者

お礼

回答ありがとうございます。 ちょっと無理なお願いをしてしまったようです。 用途としては設計文書をエクセルで作っており、各シート毎に各1ページの異なったフォームになっています。 常に印刷前に調整しなければならず、簡素化しようとしていました。 全て自動化するのは無理なようですので、全シートのプレビューを出すなどの半自動でやろうと考えています。

その他の回答 (1)

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.2

複数ページを1ページに印刷(限定ですが)するなら 「ページ設定」で「次のページ数に合わせて印刷」を 「横 1 X 縦 1」にして印刷するを 「新しいマクロの記録」でコードを取得できると思います。 参考になればよいのですが。

believe_me
質問者

お礼

回答ありがとうございます。 .FitToPagesWide = 1 .FitToPagesTall = 1 を指定してトライしたこともありますが、上手くいかなかったと思います。

関連するQ&A