我正在為研究參與者創建一個聯系資訊資料庫。在其中,我有一個帶有命令按鈕的表單,該按鈕應該根據表單上一個文本欄位的值(鏈接到該欄位所在的表)為每個參與者保存 2 個可能報告中的 1 個作為 pdf自動計算為 0 或 2)。基本上,如果該欄位的值為 0,那么我希望為該參與者保存“UnsignedLetter”報告,或者如果該欄位的值為 2,我希望保存“SignedLetter”報告。
除了選擇要保存的正確報告外,我已經完成了大部分作業。FindFirst 似乎最接近成功,但它并不完全正確。當我單擊下面代碼的按鈕時,編碼為 0 的參與者將獲得報告的兩個版本,而不僅僅是“UnsignedLetter”版本。編碼為 2 的參與者不會發生同樣的情況。例如,在 5 個人的記錄集上,其中 3 個編碼為 2,2 個編碼為 0,我得到 3 個正確的“SignedLetter”pdf,2 個正確的“UnsignedLetter”pdf,和一個附加 2 個不正確的“SignedLetter”pdf。這是我正在使用的代碼:
Private Sub SaveLetters_Click()
Dim rs As DAO.Recordset
Dim sFolder As String
Dim sFile As String
On Error GoTo Error_Handler
sFolder = Application.CurrentProject.Path & "\"
Set rs = Me.RecordsetClone
With rs
.FindFirst "OncID = 2"
Do While Not .EOF
DoCmd.OpenReport "SignedLetter", acViewPreview, , "[ID]=" & ![ID],
acHidden
sFile = Nz(![UNumber], "") & "_signed" & ".pdf"
sFile = sFolder & sFile
DoCmd.OutputTo acOutputReport, "SignedLetter", acFormatPDF, sFile, , , ,
acExportQualityPrint
DoCmd.Close acReport, "SignedLetter"
.MoveNext
Loop
End With
With rs
.FindFirst "OncID = 0"
Do While Not .EOF
DoCmd.OpenReport "UnsignedLetter", acViewPreview, , "[ID]=" & ![ID], acHidden
sFile = Nz(![UNumber], "") & "_unsigned" & ".pdf"
sFile = sFolder & sFile
DoCmd.OutputTo acOutputReport, "UnsignedLetter", acFormatPDF, sFile, , , ,
acExportQualityPrint
DoCmd.Close acReport, "UnsignedLetter"
.MoveNext
Loop
End With
MsgBox "Letters Sent to File", vbOKOnly vbInformation, "Task Completed"
Application.FollowHyperlink sFolder
Error_Handler_Exit:
On Error Resume Next
If Not rs Is Nothing Then
rs.Close
Set rs = Nothing
End If
Exit Sub
Error_Handler:
If Err.Number <> 2501 Then
MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & _
"Error Source: cmd_GenPDFs_Click" & vbCrLf & _
"Error Description: " & Err.Description & _
Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
, vbOKOnly vbCritical, "An Error has Occured!"
End If
Resume Error_Handler_Exit
End Sub
此時我已經搜索了 2 天,但找不到任何解決方案。我試過分別做 2 ,在另一個陳述句的 Then 部分之后With rs使用 1 ,更改計算,使其產生文本而不是數字,以及我能想到或在網上找到的任何其他內容。在這一點上,我覺得我快要流淚了,非常感謝你們提供的任何幫助。With rsIf .NoMatch
uj5u.com熱心網友回復:
不需要 FindFirst。兩個報告的大部分代碼是相同的。使用一個If Then Else和一個變數來選擇適當的報告并動態執行命令。
Dim sRpt As String
With Me.RecordsetClone
Do While Not .EOF
If !OncID = 0 Then
sRpt = "Unsigned"
Else
sRpt = "Signed"
End If
DoCmd.OpenReport sRpt & "Letter", acViewPreview, , "[ID]=" & ![ID], acHidden
DoCmd.OutputTo acOutputReport, , acFormatPDF, _
CurrentProject.Path & "\" & Nz(![UNumber], "") & "_" & sRpt & ".pdf"
DoCmd.Close
.MoveNext
Loop
End With
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/468353.html
標籤:毫秒访问
