2009-09-03 55 views
4

我有一些代碼在excel中攔截Before_Print事件,以確保用戶在打印工作表之前填寫了所有必填字段。但是,我只希望在用戶實際打印時觸發此代碼,而不是在調用打印預覽時觸發。在excel vba中打印和打印預覽事件之間的區別

Before_Print代碼中是否有任何方法可以告訴用戶是實際打印還是隻是預覽?

,我目前擁有的代碼是(事件存根是用Excel生成):

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

回答

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 
0

我想我會提供一個非常明顯的按鈕,供用戶在想要打印預覽時推送。

使打印按鈕隱藏(在按鈕的選項),並讓代碼簡單地說:

ActiveWindow.ActiveSheet.PrintPreview 
0

要打印,你可以做這樣的事情:

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

要按照建議的打印預覽:

ActiveWindow.ActiveSheet.PrintPreview 

每個人都需要一個不同的按鈕,但eit她的方式我強烈建議您測試是否真的需要兩者,因爲預覽按鈕可能適用於您的打印選項,尤其是因爲在大多數情況下,您可以直接從預覽中打印。

我可能在這裏錯了,但我不這麼認爲。

就在這裏,我在這裏發佈的打印選項將直接打印,它不會請求選項,因爲它們已被編碼到腳本中,如果您想更改要打印的副本數量,請更改copies:=無論你想要什麼號碼...

享受:)