excel vba中的打印和打印预览事件之间的差异

时间:2009-09-03 02:12:56

标签: excel vba excel-vba printing print-preview

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

有没有办法在Before_Print代码中告诉用户是实际打印还是只是预览?

我目前拥有的代码是(事件存根由excel生成):

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

我想我会为想要打印预览的用户提供一个非常明显的按钮。

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

ActiveWindow.ActiveSheet.PrintPreview

答案 2 :(得分:-1)

要打印你可以这样做:

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

按建议打印预览:

ActiveWindow.ActiveSheet.PrintPreview 

每个人都会需要一个不同的按钮,但无论哪种方式,我强烈建议您测试是否真的需要两个,因为预览按钮可能适用于您的打印选项,特别是因为在大多数情况下您可以直接打印预览。

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

只是抬头,我在这里发布的打印选项将直接打印,它不会请求选项,因为它们已被编码到脚本中,如果您想要更改要打印的副本数量,请更改{ {1}}你想要的任何数字......

享受:)