2009-09-03 1716 views
4

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

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

,我目前拥有的代码是(事件存根是用Excel生成):

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

回答

0

我不认为这是一个巧妙的方法来确定该事件是否打印预览或打印请求。

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

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

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 
0

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

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

ActiveWindow.ActiveSheet.PrintPreview 
0

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

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

要按照建议的打印预览:

ActiveWindow.ActiveSheet.PrintPreview 

每个人都需要一个不同的按钮,但eit她的方式我强烈建议您测试是否真的需要两者,因为预览按钮可能适用于您的打印选项,尤其是因为在大多数情况下,您可以直接从预览中打印。

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

就在这里,我在这里发布的打印选项将直接打印,它不会请求选项,因为它们已被编码到脚本中,如果您想更改要打印的副本数量,请更改copies:=无论你想要什么号码...

享受:)