我有一些代码可以拦截 Excel 中的 Before_Print
事件,以确保用户在打印工作表之前已填写所有必填字段。但是,我只希望在用户实际打印时触发此代码,而不是在他们只是调用打印预览时触发。
有什么方法可以在 Before_Print
代码中判断用户是在实际打印还是只是在预览?
我当前拥有的代码是(事件 stub 由Excel生成):
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Not Sheet2.CheckAllFieldsFilled Then
Cancel = True
End If
End Sub
最佳答案
我认为没有一种巧妙的方法来确定事件是打印预览还是打印请求。
下面的解决方案并不是特别简洁,并且给用户带来了轻微的不便,但它确实有效。
代码取消事件,然后提示用户,根据用户的响应显示打印预览或打印。
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Print_or_Preview As XlYesNoGuess
Application.EnableEvents = False
Cancel = True
Print_or_Preview = MsgBox("Show Print Preview?", vbYesNo)
If Print_or_Preview = True Then
ActiveWindow.ActiveSheet.PrintPreview
Else
ActiveWindow.ActiveSheet.PrintOut
End If
Application.EnableEvents = True
End Sub
关于vba - excel vba中打印和打印预览事件的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1371107/