印刷の開始ページ・終了ページを変数で指定するには?

Question 27.1 Previous Next
仕事上今までは、ロータスを使用していましたが、時代の流れと共にエクセルへ移行するようになってきました。 ロータスではマクロを組み込み快適に仕事上の書類を作成することができたのですが・・・
エクセルでいざ、VBAマクロを組もうとすると・・・

まず始めに行いたいのが印刷マクロなんですけど、例えば30枚の入力用紙があり、記入された上から順に5枚入力された 場合、勝手にマクロ処理を行い、入力された5枚だけを印刷したいマクロを組みたいんですけど・・
シート上で計算された印刷終了ページをPrint Out メソッドの中の”To”の部分に数値を入力したいんですけど、どうも自分で 試した限りではマクロを実行する事が出来ません。教えて頂けないでしょうか?

ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate:True
                                ↑
     Toの右辺の「2」をセル上の例えば”x1”のセルから最終印刷ページ数を指定出来ないでしょうか??

始めるからにはちゃんと覚えたいんですけど、周りに解る人も居ず、解説書でも理解が困難なもんで・・
Answer   Copyright (C) 2000.3.22 永井善王
この質問への回答としてはズバリではないですが、すでに類似例を掲載済みです。
そこで、そのページ
変数で範囲指定して選択するには?)から関係部分を転載しましたので、 まず、次を見てください。
マクロを自動記録すると、選択した範囲が "B3:E6" のような表現になりますね。他のケースでも同様で、例えば印刷枚数を 2枚と指定すると "2" と記録されます。
そこで、これらの指定を任意に変えたい場合に、変数をどう書けば良いのか知りたくなります。 この「すぐに役立つエクセルVBAマクロ集」の中のあちこちに、使用例が載っています。

例えば、印刷枚数の指定は、MACROの「印刷」のページの
1)伸縮する表の印刷
    印刷枚数 = 1
    ActiveWindow.SelectedSheets.PrintOut Copies:=印刷枚数
の例が見られます。
school これを見習って、ご質問のマクロを書きかえると、次のようになります。
    開始ページ = 1
    終了ページ = 2
    印刷部数 = 1
    ActiveWindow.SelectedSheets.PrintOut From:=開始ページ, To:=終了ページ, _
        Copies:=印刷部数
本題とは無関係ですが、質問のマクロの末尾に 「Collate:True」 と書かれていて 「=」 が抜けています。 「Collate:=True」 が正しいです。 質問送付時の入力ミスかと思いますが、モジュールシートに書かれているマクロコードがそうなっている場合は、 「どうも自分で試した限りではマクロを実行する事が出来ません」の原因になります。

「Collate」は PrintOutメソッドの引数で、部単位で印刷する場合に「True」を指定します。省略すると「部単位で印刷しない」になります。 余談になりますが、質問のマクロコードは印刷部数が「1」ですから「True」を指定しても無意味と思います。 例えば、印刷部数が「2」、開始ページが「1」、終了ページが「2」の場合に、「Collate:=True」 と指定すると、プリンターから 1ページ→2ページ→1ページ→2ページと丁合いされた状態で出てきます。
本題にもどります。
最終的な希望は、「例えば”x1”のセルから最終印刷ページ数を指定したい」でした。上記の見習って作ったマクロの変数「終了ページ」に セルの値をセットするには、
[値の出入]のページに セルの値を取り出す として掲載されて いる次の書き方
    年 = Cells(2, 1)                        'A2セルの値を取り出す 
を見習えばできます。
この Cellsプロパティを使う方法は、セル番号をR1C1参照方式で書くので、もし、わずらわしければ、
    終了ページ = Range("x1").Value
のように書くことも可能です。ご成功を祈ります。

 

Excel VBA Macro