【问题标题】:Difference between print and print preview events in excel vbaexcel vba中打印和打印预览事件的区别
【发布时间】:2010-11-25 03:50:54
【问题描述】:
我有一些代码可以截取 excel 中的 Before_Print 事件,以确保用户在打印工作表之前填写了所有必填字段。但是,我只希望在用户实际打印时触发此代码,而不是在他们只是调用打印预览时触发。
有没有办法在Before_Print 代码中判断用户是实际打印还是预览?
我目前拥有的代码是(事件存根由excel生成):
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Not Sheet2.CheckAllFieldsFilled Then
Cancel = True
End If
End Sub
【问题讨论】:
标签:
vba
excel
printing
print-preview
【解决方案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
【解决方案2】:
我想我会提供一个非常明显的按钮供用户在想要打印预览时按下。
隐藏按钮以进行打印(在按钮的选项中),并让代码简单地说:
ActiveWindow.ActiveSheet.PrintPreview
【解决方案3】:
要打印,你可以这样做:
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
按照建议打印预览:
ActiveWindow.ActiveSheet.PrintPreview
每个都需要一个不同的按钮,但无论哪种方式,我都强烈建议您测试您是否真的需要两个,因为预览按钮可能适用于您的打印选项,特别是因为在大多数情况下您可以直接从预览。
我在这里可能错了,但我不这么认为。
请注意,我这里发布的打印选项会直接打印,它不会请求选项,因为它们已经编码到脚本中,如果要更改要打印的份数,请更改@ 987654323@ 到您想要的任何号码...
享受:)