印刷後のマクロの実行(Microsoft Excel)
フランクリンには、ワークシートの一部の行を非表示にしてからワークシートを印刷するマクロがあります。これを行うために、彼はBeforePrintイベントハンドラーを使用します。問題は、フランクリンが印刷の完了後に行を自動的に再表示したいということです。彼は自分のマクロ内でこれを行う方法を知りません。
これにアプローチする方法はいくつかあります。 1つは、BeforePrintイベントハンドラーを使用して、必要な行を非表示にし、OnTimeメソッドを介して実行するマクロを指定することです。イベントハンドラーの外観は次のとおりです。
Private Sub Workbook_BeforePrint(Cancel As Boolean) ' Code here to hide rows desired Application.OnTime Now, "AfterPrint" End Sub
非表示にする行を非表示にするコードをこのイベントハンドラーに追加する必要があります。 (フランクリンは、そのようなコードが機能していると言いました。問題があったのは、印刷後にコードを非表示にしていました。)OnTimeを介して呼び出されるマクロは、AfterPrintと呼ばれるマクロであることに注意してください。このマクロは、イベントハンドラーが配置されるのと同じモジュールではなく、通常のモジュール内に配置する必要があります。イベントハンドラよりもさらに単純な場合があります:
Sub AfterPrint() ' Code here to unhide rows Cells.Select Selection.EntireRow.Hidden = False End Sub
必要に応じて、OnTimeメソッド(およびAfterPrintマクロ)の必要性を完全に回避することもできます。これには、このアプローチが含まれます:
Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True ' Code here to hide rows desired Application.EnableEvents = False ActiveSheet.PrintOut Application.EnableEvents = True ' Code here to unhide rows End Sub
マクロは、BeforePrintイベントをトリガーした印刷をキャンセルし、行を非表示にし、アクティブなワークシートを印刷してから、行を再表示するために機能します。
このようなイベントハンドラベースのアプローチの欠点は、ユーザーが印刷できるものが制限されることです。つまり、ユーザーは、実際に印刷したいものではなく、あなたが印刷を許可したものだけを印刷できます。このかなり大きな制限を回避するには、BeforePrintアプローチを完全に放棄する必要があります。代わりに、印刷を処理する通常のマクロを作成します。
Sub PrintWS() ' Code here to hide rows desired Application.EnableEvents = False ActiveSheet.PrintOut Application.EnableEvents = True ' Code here to unhide rows End Sub
これは基本的に、2番目のBeforePrintアプローチの本質であることに注意してください。行を非表示にし、ワークシートを印刷してから、行を再表示します。このPrintWSマクロは、クイックアクセスツールバーのショートカットキーなどに関連付けて、簡単に呼び出すことができます。
ちなみに、BeforePrintアプローチのいずれかを使用することにした場合、Excelのすべてのバージョンで正しく機能しないという報告があります。 (これを追跡するのは非常に難しいようです。)一部のバージョンでは、BeforePrintイベントハンドラーが呼び出される前に、Excelが印刷する内容が「確定」されます。つまり、ワークシートが実際に印刷されるときに、イベントハンドラー内で非表示にした行は無視されるため、マクロで行を非表示にしたことがないかのようになります。この非常に苛立たしい事実を回避する唯一の方法は、上記の2番目のBeforePrintの例またはPrintWSマクロアプローチのいずれかを使用して、自分で直接印刷を処理することです。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(13624)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。