4

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

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

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

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

3 回答 3

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
于 2009-09-03T14:48:30.447 回答
-1

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

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

ActiveWindow.ActiveSheet.PrintPreview
于 2009-09-30T20:47:35.083 回答
-1

要打印,您可以执行以下操作:

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

按照建议打印预览:

ActiveWindow.ActiveSheet.PrintPreview 

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

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

请注意,我在这里发布的打印选项将直接打印,它不会请求选项,因为它们已被编码到脚本中,如果您想更改要打印的份数,请将其更改为您想要的copies:=任何数字希望...

享受 :)

于 2012-08-27T13:58:48.870 回答