VBATips

「PrintPreview が表示されないのはScreen Updatingの影響」ExcelVBAマクロ

PrintPreviewが表示できない

最近、VBA開発でハマったケースです。
印刷プレビュー機能を実装していた時に、印刷プレビューが表示されない現象が発生しました。
■現象
・フリーズのように見える(動作が固まる?)が、マウス操作は可能である。
・Escキーを押すと、すぐにマクロ動作がストップする。(フリーズはしていない)
・ステップインでプログラムを1行ずつ実行すると、正常にPrintPreviewが表示される。
・PrintOutでの印刷は正常に動作
する。

PrintPreviewが表示されないコード(Excel 2016で再現)

Public Sub sample_error_printpreview()

    '■描画を停止
    Application.ScreenUpdating = False
    
    '■新規ブックを作成し、セルA1にデータを入れる
    Workbooks.Add
    Range("a1") = 1 '■シートが空だとPrintPreviewはできません
    
    '■プリントプレビューのコードでエラーは発生しないが、一向にプレビュー表示しない
    ActiveSheet.PrintPreview
    
    '■描画を再開
    Application.ScreenUpdating = True

End Sub

Application.ScreenUpdating = Falseの場合、PrintPreviewが表示されない仕様のようです。
上記であれば、ググれば出てきます。
ActiveSheet.PrintPreviewの前にScreenUpdating=TrueにすればOKと考え、
下記のようにコードを変更しましたが、プレビュー表示が出来ません。
     Application.ScreenUpdating = True
     ActiveSheet.PrintPreview
     '→上記の場合でも、プレビュー表示されない

 

結果、PrintPreviewが関係するコードの場合は、Application.ScreenUpdating = False自体コードに入れない事で、
正常に、印刷プレビューを確認しました。

その他

ActiveSheet.PrintOut Preview:=Trueでも、同様に表示されません。
印刷範囲を再設定しても、同様に表示されません。
UserFormからのPrintPreviewであろうが、WorkSheetからのPrintoPreviewでも、表示されません。

コメント

タイトルとURLをコピーしました