GpioNelson
GpioNelson

Reputation: 55

Concatenate multiple strings into single msgbox

via the below code I have a number of validation steps. Currently if a user omits 1 or more data inputs and or inputs incorrectly data they are getting multiple msgboxes. Not a great UI experience, what I'm looking to do is to concatenate these strings into a single msgbox. Bear in mind I'm unable to do so using System.Text etc to generate a string builder using append.

I'm relatively new to vba so if you do post any comments or feedback if you could explain it as fully as possible.

Public Function ValidateMe(strAccNum As String, iDte As Integer, strTRS As String, strPrem As String) As Boolean
    ' Function tests each input passed to it and validates it. If there is an issue the user is notified with a message box.
    Dim blnValAcc As Boolean
    Dim blnValDte As Boolean
    Dim blValTRS As Boolean
    Dim blnValPrem As Boolean
    Dim blnValidOverall As Boolean

    ' Default to Invalid
    blnValAcc = False
    blnValDte = False
    blnValTRS = False
    blnValPrem = False
    blnValidOverall = False

    ' Validate Account Number
    Dim strMessage As String
    Dim strSortCode As String
    strMessage = ""
    strSortCode = Left(strAccNum, 6)

    ' AccNum must be 14 characters long and all characters must be numeric
    If (Len(strAccNum) = 14 And (IsNumeric(strAccNum) = True)) Then
        blnValAcc = True
    Else:
        strMessage = strMessage & vbNewLine & "Account Number must be 14 characters long and contain only numeric characters."
    End If

    ' 8 and 10 digit account nubmers cannot have a due date change
    If (Len(strAccNum) = (8 Or 10) And (IsNumeric(strAccNum) = True)) Then
        blnValAcc = False
        strMessage = strMessage & vbNewLine & "8 and 10 digit account numbers cannot have a due date change."
    End If

    ' Checks sort code against list of sort codes if the accout number has already passed previous tests
    If blnValAcc = True Then
        blnValAcc = CheckSortCode(strSortCode)
        If blnValAcc = False Then
            strMessage = strMessage & "Check sort code."
        End If
    End If

    If blnValAcc = False Then
        MsgBox strMessage, , "Check Account Number"
    End If

    ' Validate new Due Date
    If (iDte >= 1 And iDate <= 31) Then
        blnValDte = True
    Else:
        blnValDte = False
        MsgBox "Please enter a valid due date, a number between 1 and 31", , "Invalid Date"
    End If

    If ((strTRS = "Yes") Or (strTRS = "No")) Then
        blnValTRS = True
    End If

    ' Validate strPrem
    If strPrem = "Yes" Then
        blnValPrem = True
    Else:
        MsgBox "Customer must be advised of how change may affect premiums.", , "Premium Changes"
    End If

    ' Validate strTRS
    If strTRS = "" Then
        valTRS = False
        MsgBox "Please select an option from the drop down menu.", , "Customer has been advised of TRS implications?"
    End If

    If ((blnValAcc = True) And (blnValDte = True) And (blnValTRS = True) And (blnValPrem = True)) Then
        blnValidOverall = True
    End If

    ' Function returns true or false
    ValidateMe = blnValidOverall

End Function

Upvotes: 1

Views: 1598

Answers (1)

Tim Williams
Tim Williams

Reputation: 166146

Basic pattern:

Dim msg as string

If someProblem1 then
    msg = msg & iif(len(msg) > 0, vbLf, "") & "Problem1 description"
end if

if someProblem2 then
    msg = msg & iif(len(msg) > 0, vbLf, "") & "Problem2 description"
end if

'etc etc


'done testing...
if len(msg) > 0 then
    msgbox "There are some problems with your submission:" & vbLf & vbLf & msg,, "Oops"

end if

ValidateMe = (Len(msg) = 0)

Upvotes: 3

Related Questions