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

标签 vba excel printing print-preview

我有一些代码可以拦截 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/

相关文章:

vba - 如何使用 VBA 进行 VLookup 比较 2 个不同的表并删除单元格表匹配的行?

c# - 通过关系检查和可能的坏数据逐行插入大量数据

vba - Excel VBA "Autofill Method of Range Class Failed"

javascript - 如何使用 React/JS 连接到斑马打印机

java - java中的热敏打印机命令

c# - 在 Winform 应用程序中打印

Excel 使用 VBA 迭代嵌套数据透视表行字段

arrays - 数组vba的最高填充维度

excel - 在列中显示行值

excel - Pandas :to_excel() float_format