Karenは、ユーザーが1つのワークシートを印刷することを選択した場合でも、ワークブック全体を印刷する方法を探しています。言い換えれば、彼女はワークブック全体を印刷する方法、またはまったく印刷しない方法を探しています。「間に」オプションがあってはなりません。

これを処理する唯一の方法は、マクロを使用することです。 VBAを使用すると、特定のイベントが発生したときに開始されるマクロを作成できます。マクロをトリガーできるイベントの1つは、「印刷」イベントです。誰かが印刷を要求するか、印刷プレビューを表示することを選択すると、WorkbookオブジェクトのBeforePrintイベントがトリガーされます。イベントがトリガーされたときに実行される独自のマクロを作成できます。

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim sht As Variant     Dim bPreview As Boolean     Dim iResponse As Integer     On Error GoTo ErrHandler

iResponse = MsgBox(prompt:="Do you want to Print Preview?", _         Buttons:=vbYesNoCancel, Title:="Preview?")



Select Case iResponse         Case vbYes             bPreview = True         Case vbNo             bPreview = False         Case Else             GoTo ExitHandler     End Select     Application.EnableEvents = False     For Each sht In Sheets         If sht.Visible Then             sht.PrintOut Preview:=bPreview         End If     Next

ExitHandler:

Application.EnableEvents = True     Cancel = True     Exit Sub

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Excelが印刷の準備をするとき、または印刷プレビューが呼び出されるときはいつでも、BeforePrintイベントがトリガーされ、このマクロが実行されます。マクロは最初に、ユーザーに印刷プレビューを実行するかどうかを尋ねます。 Select Case構造は、質問への回答に基づいてbPreview変数を設定するために使用されます。次に、bPreviewの設定により、何が起こるかが制御されます。

プレビューについて尋ねられたときにユーザーが[キャンセル]をクリックすると、マクロが終了し、印刷がキャンセルされます。それ以外の場合は、ワークブックの各ワークシートを調べて、印刷またはプレビューします。ワークシートが表示されている場合は印刷され、PreviewプロパティはbPreviewと同じに設定されます(Trueはワークシートがプレビューされることを意味し、Falseは実際に印刷されることを意味します)。

マクロがEnableEventsプロパティをFalseに設定していることに注意してください。これは、印刷中またはプレビュー中に他のイベントがトリガーされないようにするために行われます。

EnableEventsを「オン」のままにすると、PrintOutメソッドが使用されるたびに、BeforePrintイベント全体が再度トリガーされます。イベント処理がオフにされていないと、ユーザーは無限ループに陥ります。

また、マクロを終了する前に最後に発生することの1つは、CancelプロパティがTrueに設定されていることです。これは、BeforePrintイベントを生成した元の印刷または印刷プレビュー要求がキャンセルされるようにするために行われます。結局のところ、その要求を完了する必要はなく、マクロはユーザーのすべての印刷処理を実行しました。

もちろん、このアプローチを印刷に使用する場合の注意点が1つあります。マクロが有効になっていない場合、ハンドラーは実行されず、ユーザーは必要に応じて印刷できます。 (ワークブックを開いているときにShiftキーを押すとマクロが無効になり、ほとんどの場合、ユーザーはマクロを有効にするかどうかを尋ねられます。)_ ExcelTips_の他の問題でこの事実が説明されています。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3329)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excelribbon-Printing_All_or_Nothing [Printing All orNothing]