代码之家  ›  专栏  ›  技术社区  ›  a_m0d

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

  •  4
  • a_m0d  · 技术社区  · 16 年前

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

    有什么办法可以告诉你 打印前 代码用户是实际打印还是只是预览?

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

    Private Sub Workbook_BeforePrint(Cancel As Boolean)
        If Not Sheet2.CheckAllFieldsFilled Then
            Cancel = True
        End If
    End Sub
    
    3 回复  |  直到 16 年前
        1
  •  0
  •   Robert Mearns    16 年前

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

    下面的解决方案并不是特别整洁,给用户带来了一些不便,但它是有效的。

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

    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
  •  -1
  •   Siddharth Rout    13 年前

    我想我会提供一个非常可见的按钮,让用户在想要打印预览时按下。

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

    ActiveWindow.ActiveSheet.PrintPreview
    
        3
  •  -1
  •   Matt Ridge    13 年前

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

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

    按建议打印预览:

    ActiveWindow.ActiveSheet.PrintPreview 
    

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

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

    只是一个提示,我在这里发布的打印选项将直接打印,它不会请求选项,因为它们已被编码到脚本中,如果要更改要打印的副本数,请更改 copies:= 不管你想要多少…

    享受:)