閲覧して下さってありがとうございます。
今回エクセルにてVBAを用いて、以下の条件をクリアできるコードを知りたいです。
<条件>
① sheet1を印刷する際、本当に印刷するかどうかを「はい」か「いいえ」で尋ねてほしい。
はいの場合は印刷し、いいえの場合は印刷しません。
(MsgBox("本当に印刷しますか?", vbExclamation + vbYesNo) = vbYes Then)恐らく式はこんな感じですよね…?
② sheet2やsheet3を閲覧中に、sheet1と2と3をまとめて印刷する際にも
sheet1に対して①の質問をしてほしい。
このとき「はい」を選択した場合はどちらも印刷されますが、
「いいえ」を選択した場合はsheet2と3のみ印刷されるようにしたいです。
③ sheet2や3単体を印刷するときは何も表示されずそのまま印刷される。
自分なりに以下の
Sub Workbook_BeforePrint(Cancel As Boolean)
Dim sh As Object
Cancel = True
For Each sh In ActiveWindow.SelectedSheets
sh.Activate
If UCase(ActiveSheet.Name) = "sheet1" Then
If MsgBox("本当に印刷しますか?", vbExclamation + vbYesNo) = vbYes Then
ActiveSheet.PrintOut
End If
End If
Next
End Sub
というコードでやってみましたが、なぜか2回同じ質問が飛んできて(はいを選んでももう一度選択を迫られます。)、さらに2回「はい」を選択しても印刷が実行されません。
質問は1回のみにしたいし、印刷は実行されるようにしたいのですが…
いかんせん初心者なもので、ネットで調べてもなかなか条件に見合ったページを見つけることができず…
わがままですが、各行の意味を記載してもらったうえで
正しいコードを教えていただけないでしょうか。
皆さんお忙しいところ恐縮ですが、
宜しくお願い致します…
No.1ベストアンサー
- 回答日時:
前回の作者です。
他には類のみない内容で、出来たと思って、印刷はしていなかったので、再帰がかかることは予想はしていませんでした。大変に失礼しました。
それから、一部変えたようですが、 UCase は、大文字の意味です。UCase関数なしのほうがわかりやすかったら、なしでもよいです。sheet1は、現在小文字になっています。
これは、英字のときのお約束のようなものです。STRCOMPという文字列比較関数もあります。
If UCase(ActiveSheet.Name) = "SHEET1" Then
これでどうでしょうか?
以下のコードを経験者の方で疑問に思う方もいるかもしれませんから、注釈しておきます。
※ 長い印刷時間の掛かる場合に、ESCなどを入れられると、イベント型マクロが完全に死んでしまうことがありますので、
Application.EnableEvents = False
sh.PrintOut
Application.EnableEvents = True
と間髪をいれないで、EnableEvents の間に入れました。
また、ESCの信号自体を、マクロで拾うことは可能ですが、この場合は、コードが単純なので、複雑にしたくありませんでした。
なお、初心者の方でも、イベント型マクロの復旧方法は簡単に出来ますが、ただ、マクロを作った側からすると、復旧させるのは、やはり間が抜けているように思いました。
[Application.EnableEvents =True をイミディエイトウィンドウで実行する]
ThisWorbkook モジュール
'---------------------
Sub Workbook_BeforePrint(Cancel As Boolean)
Dim sh As Object
Cancel = True
For Each sh In ActiveWindow.SelectedSheets
sh.Activate
If UCase(sh.Name) = "SHEET1" Then
If MsgBox("本当に印刷しますか?", vbExclamation + vbYesNo) = vbYes Then
Application.EnableEvents = False ''※割り込みを嫌っているからこうした
sh.PrintOut
Application.EnableEvents = True
End If
Else
Application.EnableEvents = False
sh.PrintOut
Application.EnableEvents = True
End If
Next
End Sub
WindFaller様
できました!
何とお礼を言えばいいのやら!
とにかく本当にありがとうございます。
このコードの仕組みがどうなっているのかも含め、
再度上から順に意味を調べてみます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PDFファイルがカラー印刷できない
-
右クリックができないページの...
-
【EXCEL】【VBA】空欄は飛ばし...
-
PVC(ポリ塩化ビニール)の有害...
-
テプラー:KING JIM SR720 連...
-
ブログを印刷したい
-
ACCESS レポートの印刷枚数指...
-
Wordで複数枚印刷しようと...
-
ワードなどのB6を原寸でB5...
-
印刷の行間が飛んで印刷される
-
手紙で字が汚い時の添え書きは?
-
メールの画像が印刷できません。
-
PDFファイルを印刷すると黒くなる
-
PDFの印刷が途中で終わってしま...
-
A3のPDFをA4プリンター...
-
複合機の再印刷について。
-
Windows Liveメール2012の印刷機能
-
バックグラウンドとは?何度再...
-
エクセルで複数ページを1枚に...
-
機密文書を印刷できなくするには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【EXCEL】【VBA】空欄は飛ばし...
-
特定のファイルのみ印刷がされ...
-
PDFファイルがカラー印刷できない
-
PDFの印刷が途中で終わってしま...
-
メールの画像が印刷できません。
-
Wordで複数枚印刷しようと...
-
印刷の行間が飛んで印刷される
-
Excelでの印刷について
-
PDF印刷 一枚だけカラーにする方法
-
手紙で字が汚い時の添え書きは?
-
お札の透かしの位置にずれ?
-
PDFファイルを印刷すると黒くなる
-
テプラー:KING JIM SR720 連...
-
Twitterの投稿を印刷コピーしたい
-
エクセルでコメント印刷すると...
-
booking com.で予約された方 ...
-
PVC(ポリ塩化ビニール)の有害...
-
バックグラウンドとは?何度再...
-
プリンターの設定「印刷部数」...
-
OutLookメールの一部分だけを印...
おすすめ情報