excel vba中的打印和打印预览事件之间的区别

我有一些代码在Excel中拦截Before_Print事件,以确保用户在打印表单之前填写了所有必填字段。 但是,我只希望在用户实际打印时触发此代码,而不是在调用打印预览时触发。

Before_Print代码中是否有任何方法可以告诉用户是实际打印还是只是预览?

我现在的代码是(事件存根由excel生成):

 Private Sub Workbook_BeforePrint(Cancel As Boolean) If Not Sheet2.CheckAllFieldsFilled Then Cancel = True End If End Sub 

我不认为有一个确定事件是打印预览还是打印请求的方法。

下面的解决scheme不是特别整洁,不方便用户稍微,但它的工作原理。

代码取消事件,然后根据用户的响应提示用户显示打印预览或打印。

 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 

我想我会提供一个非常明显的button,供用户在想要打印预览时推送。

使button隐藏打印(在button的选项),并让代码简单地说:

 ActiveWindow.ActiveSheet.PrintPreview 

要打印,你可以做这样的事情:

 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 

按照build议打印预览:

 ActiveWindow.ActiveSheet.PrintPreview 

每个人都会需要一个不同的button,但无论哪种方式,我强烈build议您testing,如果你真的需要这两个,因为预览button可能适用于您的打印选项,尤其是因为你在大多数情况下,能够从预览中直接打印。

我可能在这里错了,但我不这么认为。

只是一个头,我在这里发布的打印选项将直接打印,它不会请求选项,因为它们已被编码到脚本,如果你想改变多less份你想打印,更改copies:=到不pipe你想要什么号码

请享用 :)