[AccessD] Print letter from InputBox data (contains long code at bottom)

Bob Gajewski bob at renaissancesiding.com
Thu Jun 19 10:55:05 CDT 2003


Dear Group

I have a generic letter report that uses InputBoxes to allow custom 
on-the-fly paragraph data entry.

The sequence asks the user for paragraph 1. If anything was input, it asks 
for paragraph 2, then 3, then 4. Finally, it asks for the signator's name 
and title. The report os then displayed in preview mode. ALL OF THIS WORKS 
PERFECTLY. I can see the entire letter with all data, as entered. Also, 
when the preview is closed, the user is asked whether the letter printed 
properly, and if they respond yes, it automatically writes a record to the 
comments child table to record the event. THIS ALSO WORKS PERFECTLY.

My problem is when I try to actually print the letter (using File, Print or 
clicking on the Print button), the program somehow starts over and prompts 
the user for paragraph one again (et cetera). I sure don't want users 
having to type their letters twice!

I'm missing something probably very obvious, and any guidance would be 
greatly appreciated!

Thanks,
Bob Gajewski

**********************************************
Option Compare Database
Option Explicit
Public gvarRecordFound As Boolean
Public strInput1 As String
Public strInput2 As String
Public strInput3 As String
Public strInput4 As String
Public strInputS As String
Public strInputT As String
------------------------------------------------------
Private Sub Report_NoData(Cancel As Integer)
Dim Msg, Response
Msg = "This report is not available; no records exist."
Response = MsgBox(Msg, vbInformation)
DoCmd.CancelEvent
End Sub
------------------------------------------------------
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)

gvarRecordFound = True

Dim MyPos
    MyPos = InStr(1, [txtJobHomeownerName], ",")

If MyPos > 0 Then
    Me.txtLetterName = Mid([txtJobHomeownerName], MyPos + 1, 35) & " " & 
Left([txtJobHomeownerName], MyPos - 1)
    Me.txtSalutation = "Dear " & Mid([txtJobHomeownerName], MyPos + 1, 35) 
& " " & Left([txtJobHomeownerName], MyPos - 1) & ":"
Else
    Me.txtLetterName = [txtJobHomeownerName]
    Me.txtSalutation = "Dear " & [txtJobHomeownerName] & ":"
End If

If Left([txtLetterName], 1) = " " Then
    [txtLetterName] = Mid([txtLetterName], 2, 35)
End If

If Left([txtSalutation], 1) = " " Then
    [txtSalutation] = Mid([txtSalutation], 2, 41)
End If

    Me.txtLetterAddress = [txtJobAddress]
    Me.txtLetterLocation = [txtJobMunicipalityName] & ", " & 
[txtJobStateCode] & " " & [txtJobZipCode]
    Me.txtClaimNumber = "'" & [txtJobCompanyReference] & "'"

'Allow user to enter text for paragraphs 1-4
    Dim strMsg1 As String
        strMsg1 = "Please enter the text for paragraph 1:"
        strInput1 = InputBox(Prompt:=strMsg1, Title:="Paragraph 1")
        If Not (IsNull(strInput1) Or strInput1 = "") Then
            Me.txtParagraph1 = strInput1
            Dim strMsg2 As String
                strMsg2 = "Please enter the text for paragraph 2:"
                strInput2 = InputBox(Prompt:=strMsg2, Title:="Paragraph 2")
                If Not (IsNull(strInput2) Or strInput2 = "") Then
                    Me.txtParagraph2 = strInput2
                    Dim strMsg3 As String
                        strMsg3 = "Please enter the text for paragraph 3:"
                        strInput3 = InputBox(Prompt:=strMsg3, 
Title:="Paragraph 3")
                        If Not (IsNull(strInput3) Or strInput3 = "") Then
                            Me.txtParagraph3 = strInput3
                            Dim strMsg4 As String
                                strMsg4 = "Please enter the text for 
paragraph 4:"
                                strInput4 = InputBox(Prompt:=strMsg4, 
Title:="Paragraph 4")
                                If Not (IsNull(strInput4) Or strInput4 = 
"") Then
                                    Me.txtParagraph4 = strInput4
                                End If
                        End If
                End If

            'Allow user to enter text for signator and title
                Dim strMsgS As String
                    strMsgS = "Please enter the signator's name:"
                    strInputS = InputBox(Prompt:=strMsgS, 
Title:="Signator")
                    If Not (IsNull(strInputS) Or strInputS = "") Then
                        Me.txtSignator = strInputS
                        Dim strMsgT As String
                            strMsgT = "Please enter the signator's title:"
                            strInputT = InputBox(Prompt:=strMsgT, 
Title:="Title")
                            If Not (IsNull(strInputT) Or strInputT = "") 
Then
                                Me.txtSignatorTitle = strInputT
                            End If
                    Else
                        Me.txtSignator = "Renaissance Siding"
                    End If
        Else
            MsgBox "There was no text entered for Paragraph 1."
            Cancel = True
            gvarRecordFound = False
        End If

End Sub
------------------------------------------------------
Private Sub Report_Close()
If gvarRecordFound = False Then
    Exit Sub
End If
Dim db As Database, rs As Recordset
Dim Response
Dim strMsgPrint As String
    strMsgPrint = "Did the letter print properly?"
If vbNo = MsgBox(strMsgPrint, vbYesNo + vbQuestion, "Print Letter 
Verification") Then
    Response = acDataErrDisplay
Else
    'Add letter subject to comments
    Dim strInput As String, strMsg As String
        strMsg = "What was the subject of this letter?"
        strInput = InputBox(Prompt:=strMsg, Title:="Subject")
        If IsNull(strInput) Or strInput = "" Then
            strInput = "NOT SPECIFIED"
        End If
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tblJobComments", dbOpenDynaset)
    On Error Resume Next
    rs.AddNew
        Dim strComment As String
            strComment = "HOMEOWNER LETTER PRINTED (SUBJECT: " & 
UCase(strInput) & ")."
        rs!lngJobID = lngJobID
        rs!txtJobComment = strComment
        rs!dteJobCommentNow = Now()
        rs!cboJobCommentPrivate = False
    rs.Update
    If Err Then
        MsgBox "An error occurred, and the comments were not updated." & 
vbCrLf & "Remember to add a comment to the database" & vbCrLf & "record 
indicating that the letter was sent today."
        Response = acDataErrContinue
    Else
        Response = acDataErrAdded
    End If
    rs.Close
End If
End Sub



More information about the AccessD mailing list