Excel VBA中print和print preview事件的区别

5
我有一些代码,它拦截 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个回答

1

我认为没有一种简洁的方法来确定事件是打印预览还是打印请求。

下面的解决方案并不特别简洁,稍微有点不便,但它能够正常工作。

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

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

我认为为用户提供一个非常明显的按钮,在想要进行打印预览时按下。

将按钮在打印时隐藏(在按钮选项中),让代码简单地说:

ActiveWindow.ActiveSheet.PrintPreview

-1

要打印,你可以像这样做:

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

如建议所述,进行打印预览:

ActiveWindow.ActiveSheet.PrintPreview 

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

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

提醒一下,在此发布的打印选项将直接打印,不会请求选项,因为它们已经编码到脚本中,如果要更改要打印的副本数量,请将copies:=更改为您想要的任意数字...

尽情享受吧 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接