引用:
Workbook_BeforeCloseにて印刷を実行したい
引用:
For Each sh In Me.Worksheets
sh.PrintPreview
Next
何の条件もなしに、毎回ブックを閉じる時に
そのブックの全てのワークシートを印刷する、
というオペレーションの意義がよく分からない点は
とりあえず置いておくとして。
引用:
book1 のマクロ test より実行するとプリントプレヴューされず、
メッセージのみで閉じられてしまいます。
(とりあえず、テストでプレヴューにしています)
こちらの環境で試した限り、PrintPreview メソッドだけでなく
(本来実行しようとしている)PrintOut メソッドも実行されませんね。
( Book2.xlsm のブックモジュール)
---------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sh As Worksheet
For Each sh In Me.Worksheets
'紙がもったいないので出力先を PDF プリンタにして印刷
sh.PrintOut ActivePrinter:="Microsoft Print to PDF", _
PrintToFile:=True, _
PrToFileName:=Me.Path & "\" & sh.Name & ".pdf"
Next
Me.Saved = True
MsgBox "ByeBye"
End Sub
---------------------------------------------------------------
Worksheet オブジェクトだけではなく Workbook オブジェクトの
PrintOut / PrintPreview メソッドについても同様。
ちなみに ExportAsFixedFormat メソッドによって
PDF 出力する分には問題ありませんでした。
( Book2.xlsm のブックモジュール)
---------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sh As Worksheet
For Each sh In Me.Worksheets
sh.ExportAsFixedFormat xlTypePDF, Me.Path & "\" & sh.Name & ".pdf"
Next
Me.Saved = True
MsgBox "ByeBye"
End Sub
---------------------------------------------------------------
また、Workbook_BeforeClose イベントプロシージャを使用せず
Book2.xlsm の標準モジュールに Auto_Close マクロを記述し、
Book1.xlsm 側のマクロから明示的に呼び出す場合は
PrintOut / PrintPreview 共に有効でした。
( Book2.xlsm の標準モジュール)
---------------------------------------------------------------
Sub
Auto_Close()
Dim sh As Worksheet
For Each sh In
ThisWorkbook.Worksheets
sh.PrintPreview
Next
ThisWorkbook.Saved = True
MsgBox "ByeBye"
End Sub
---------------------------------------------------------------
( Book1.xlsm の標準モジュール)
---------------------------------------------------------------
Sub test2()
Dim wb As Workbook
Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\Book2.xlsm")
wb.RunAutoMacros xlAutoClose
wb.Close False
Set wb = Nothing
End Sub
---------------------------------------------------------------