「教えて!ピックアップ」リリース!

エクセルVBAにおいて、
例えば「セルA1が空白でないシートすべてを印刷する」
このようなコードは可能でしょうか?
よろしくお願いします。
(エクセル2000)

A 回答 (3件)

こんばんは。



Sub Test1()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
 If sh.Range("A1").Value <> "" Then
  sh.PrintOut 'Preview:=True
 End If
Next sh
End Sub

単に、こんな風にすればよいのですが、VBAを動かす前に、印刷範囲だけは確認したほうがよいかもしれません。

--それなら、VBAの意味がないではないか、と思うかもしれませんがね。(^^; もちろん、それはそれなりに方法はあるのですが。--

印刷というのは、一旦、印刷が始まると、とまらないわけですから、それで、こんなことを言っています。

sh.PrintOut Preview:=True

最初は、こんな風にして、プレビューで調べてから、印刷実行という方法もあります。
    • good
    • 4
この回答へのお礼

ご回答ありがとうございます。
ご丁寧な解説に感謝致します。

お礼日時:2008/03/14 04:26

「可能でしょうか」ってどれだけやってみたのか。


ーー
まずどういうVBAコードの、要素技術がいるのか考えましたか。
(組み合わせる前の、小さい単位での、したいことができるコード)
2,3しかないよ。
ーー
(1)セルA1が空白でない
これぐらいIf文を使って書けるでしょう。
(2)印刷する
マクロの記録で判る
シート指定.Range("A1:H30").PrintOut
のようなコード
(3)繰り返しになることはわかるね。
繰り返しは
For  Next
For Each Next
をまず考える。
「すべて」はおのずから限度はあるわけだが、この際は読み込んだブックの全てのシート
ーー
(3)は
Sub test02()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
MsgBox sh.Name
Next
End Sub
で、全シート名
がでることを確認して納得のこと。これにMsgBox sh.Name
のところが、選別、処理(=印刷)を入れる箇所になるのは分かるだろう。
(2)の「シートの指定」の部分に、Sh がそのまま使えるよ。
セルA1も、シート名 「Sh.」 で限定してね。Sh1.Range("A1")
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2008/03/11 21:36

ヒントだけですが...


ブックのSheetコレクションから、For Each で全てのシートを順次取得し、
A1の内容をチェックして印刷する事になるでしょう。

このとき「空白でない」のチェック方法が問題です。
各シートのA11が完全なブランクだけならよいのですが、「""」も印刷したくないのでしょうから、
このチェックも加えておかないと「アレ?」ということになります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
何とか頑張ってみます。

お礼日時:2008/03/11 21:32

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

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


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング