プロが教えるわが家の防犯対策術!

いつもお世話になっております。
A1の数字の分だけ印刷するマクロを以下のように理解しました。

Dim n As Integer
n = Application.WorksheetFunction.Sum(Worksheets("Sheet3").Range("A1"))

ActiveWindow.SelectedSheets.PrintOut Copies:=n, Collate:=True

これとは別に、
B1の数字(値)を参照して、
”マクロ2”というマクロの実行回数を指定したいのです。

単に一回実行するだけなら
Application.Run "マクロ2"
ですね。

実行回数を指定する場合、
どのように記述すればよいかご教示ください。
よろしくお願いします。

A 回答 (3件)

>A1の数字の分だけ印刷するマクロを以下のように理解しました。



A1に確実に数値が入力されているなら、
Dim n As Integer
n = Worksheets("Sheet3").Range("A1")
だけで十分です。
複数のセルが対象なら、sum関数(Application.WorksheetFunction.Sum() )を利用するのも良いでしょう。

繰返しなら、
For i=1 to n
Call マクロ名
Next
    • good
    • 0
この回答へのお礼

ありがとうございました。
お蔭様で解決することができました。

お礼日時:2006/11/14 12:04

こんにちは。



>A1の数字の分だけ印刷するマクロを以下のように理解しました。

コードをみる限りは、かなり変則的なものだと思います。確かに、SUMには、特殊な機能があるから、そのように、セルの代入値に対して、数値のみが、n に代入できますが、VBAらしくないコードです。

単に、Val 関数だけでもよいような気がします。

 n =Val(Worksheets("Sheet3").Range("B1").Value)

Val関数に批判的な人もいますから、
If IsNumeric(Worksheets("Sheet3").Range("B1").Value) Then
  n = CInt(Worksheets("Sheet3").Range("B1").Value)
End If

でも、

「実行回数を指定する場合」、って、

>ActiveWindow.SelectedSheets.PrintOut Copies:=n, Collate:=True

プリントアウトするのですから、n の値で回数が決まるのではありませんか?

それに、Application.Run は、同じブック内なら、Call か、そのまま、プロシージャ名を指定すれば、Private キーワードが付いていない限りは、呼び出せるはずです。それとも、プリント印刷のシートの紙の順序は決めて出したいというのでしょうか?もし、そうなら、n は、1回にして、その印刷のPrintOut の部分をループさせ、サブルーチンにして、引数で回数を決めさせるようにすればよいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
何通りかの記述方法があるのですね。

今回は印刷するマクロを指定回数実行するのではなく、
別のマクロを指定回数実行させたかったのです。

お礼日時:2006/11/14 12:07

こんにちは。



 Basicでは、ある処理を複数回繰り返すときにfor~nextという構文を使います。Basicの基本文法を勉強してください。

では。
    • good
    • 1
この回答へのお礼

ありがとうございました。
for~nextで検索して
ほぼあたりがつきました。

お礼日時:2006/11/14 12:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています