2013-05-17 29 views
1

我沒有太大的VBA編程,但我一直在使用下面的代碼退出表單是否保存更改或不前提示用戶。代碼如下:用於保存修改VBA代碼 - MS訪問

Private Sub Form_BeforeUpdate(Cancel As Integer) 


    Dim ctl As Control 

    On Error GoTo Err_BeforeUpdate 


    If Me.Dirty Then 

     If MsgBox("Do you want to save?", vbYesNo + vbQuestion, _ 
       "Save Record") = vbNo Then 
     Me.Undo 
     End If 
    End If 

Exit_BeforeUpdate: 
    Exit Sub 

Err_BeforeUpdate: 
    MsgBox Err.Number & " " & Err.Description 
    Resume Exit_BeforeUpdate 
End Sub 

無論何時,我嘗試將報告打印到PDF,它總是會提示用戶是否要保存。我希望上述代碼以這樣的方式編寫,即它總是提示用戶是否保存除有人想要打印的記錄之外的記錄。

有人能幫助修改這個代碼?

在此先感謝!

+1

假設當你說*「打印到PDF *的報告」,你實際上意味着*「打印表格」 *,請你用打印的表格爲PDF什麼方法告訴我們。 – HansUp

+0

是@hansup我的意思是「打印表單」。我正在使用名爲「可愛的PDF」的工具。其中一個我安裝了CutePDF,它允許我以打印紙張的方式打印表格,並選擇「CutePDF」作爲打印機名稱。一旦你點擊打印,比表單提示我保存記錄。那就是即時消除試圖消除... – JT2013

+0

謝謝。我認爲CutePDF作爲打印機的目的地並不是真正的核心問題。無論您的打印目的地是什麼,您都會面臨同樣的問題,因爲Access希望在打印之前存儲未保存的更改。看看我提交的答案是否有助於您指出一個有用的方向。 – HansUp

回答

2

當您試圖打印一個綁定的表格時,該表格是「髒」 ---意思是它包含未保存的更改--- Access在打印前自動執行保存。

您面臨的問題是您的表單包含一個Form_BeforeUpdate過程,該過程詢問用戶是存儲還是放棄未保存的更改,並且Access在每次保存操作之前立即處理Form_BeforeUpdate過程。

你的VBA代碼以打印形式可以先進行自我拯救,然後打印...

If Me.Dirty = True Then 
    Me.Dirty = False ' saves changes to current record 
End If 
' insert your print statement here 

一個可能的問題與方法是,將強制無需用戶確認每次你想保存打印......這可能是不可接受的。

如果您的目標是允許用戶打印包含未保存數據的表單,那麼您可能會不幸運...假設它是綁定的表單。

+0

@ JT2013我嘗試了我建議的代碼。調用'Me.Dirty = False'仍會觸發'Form_BeforeUpdate'過程。當我寫這個答案時,我忽略了這一點。既然你接受了答案,我猜這是好的。但如果這不是你想要的,我們需要投入更多的努力。 – HansUp