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

a_m*_*m0d 5 printing excel vba print-preview

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

有什么方法可以在Before_Print代码中判断用户是在实际打印还是只是在预览?

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

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    If Not Sheet2.CheckAllFieldsFilled Then
        Cancel = True
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

Rob*_*rns 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
Run Code Online (Sandbox Code Playgroud)