+ Reply to Thread
Results 1 to 27 of 27

Format Canadian Postal Code on Entry

Hybrid View

  1. #1
    Forum Contributor
    Join Date
    09-19-2004
    Location
    Canada
    Posts
    408
    Hi Mudraker,

    Thanks again for taking time to help me. I sincerely appreciate it.

    When I enter an improperly formatted postal code -- e.g., a1b2c3 -- in cell A1, it gets formatted properly (A1B 2C3) but I get the message: $A$1 - 1 is invalid for Postcode. It happens all the time. Do I need to modify the code?

    Thanks,
    Gos-C
    Using Excel 2010 & Windows 10
    "It is better to be prepared for an opportunity and not have one than to have an opportunity and not be prepared."

  2. #2
    Valued Forum Contributor mudraker's Avatar
    Join Date
    11-10-2003
    Location
    Melbourne, Australia
    Posts
    3,983
    I should have been a bit more thourgh on the testing before posting the code


    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim Rng As Range
       Dim iChar As Integer
       
       For Each Rng In Target
          If Rng.Column = 1 Then
             Application.EnableEvents = False
             Select Case Len(Rng.Value)
             Case 6
                Rng.Value = UCase(Left(Rng.Value, 3) & " " & Right(Rng.Value, 3))
             Case 7
                Rng.Value = UCase(Rng.Value)
             End Select
             If Len(Rng.Value) <> 7 Then
                MsgBox "Invalid Post Code Entyry in " & Rng.Address
                Exit For
             End If
             For iChar = 1 To 7 Step 1
                Select Case Mid(Rng.Value, iChar, 1)
                Case "A" To "Z"
                   Select Case iChar
                   Case 2, 4, 5, 7
                      MsgBox Rng.Address & " - " & Mid(Rng.Value, iChar, 1) _
                      & " is invalid for Postcode"
                      'rng.ClearContents
                      Exit For
                   End Select
                Case 0 To 9
                   Select Case iChar
                   Case 1, 3, 4, 6
                      MsgBox Rng.Address & " - " & Mid(Rng.Value, iChar, 1) _
                      & " is invalid for Postcode"
                      'rng.ClearContents
                      Exit For
                   End Select
                Case " "
                   Select Case iChar
                   Case 1 To 3, 5 To 7
                      MsgBox Rng.Address & " - " & Mid(Rng.Value, iChar, 1) _
                         & " is invalid for Postcode"
                      'rng.ClearContents
                      Exit For
                   End Select
                Case Else
                   MsgBox Rng.Address & " - " & Mid(Rng.Value, iChar, 1) _
                         & " is invalid for Postcode"
                      'rng.ClearContents
                   Exit For
                End Select
             Next iChar
          End If
       Next Rng
       Application.EnableEvents = True
    End Sub

  3. #3
    Forum Contributor
    Join Date
    09-19-2004
    Location
    Canada
    Posts
    408
    Got it! Mudraker, you're the best! Thanks a million.

    Gos-C

  4. #4
    Valued Forum Contributor mudraker's Avatar
    Join Date
    11-10-2003
    Location
    Melbourne, Australia
    Posts
    3,983
    Glad to hear all is now working correctly & thanks for the feed back

  5. #5
    Registered User
    Join Date
    01-19-2007
    Location
    Bangalore, India
    Posts
    66
    I beleive this might also helpful if you are entering Postcode in Range 'A1'.

    Sub Postal_Verify()
    If Len(Range("A1").Text) = 6 And _
    IsAlpha(Mid(Range("A1").Text, 1, 1)) = True And _
    IsAlpha(Mid(Range("A1").Text, 3, 1)) = True And _
    IsAlpha(Mid(Range("A1").Text, 5, 1)) = True And _
    IsNumeric(Mid(Range("A1").Text, 2, 1)) = True And _
    IsNumeric(Mid(Range("A1").Text, 4, 1)) = True And _
    IsNumeric(Mid(Range("A1").Text, 6, 1)) = True Then
    Range("A1") = Left(Range("A1"), 3) & " " & Right(Range("A1"), 3)
    Else
    MsgBox "Invalid Postal Code."
    End If
    End Sub
    Function IsAlpha(chr As String) As Boolean
    If Asc(chr) >= 97 And Asc(chr) <= 122 Or Asc(chr) >= 65 And Asc(chr) <= 90 Then
    IsAlpha = True
    Else
    IsAlpha = False
    End If
    End Function

    Regards,
    Gajendra Gupta

  6. #6
    Registered User
    Join Date
    01-19-2007
    Location
    Bangalore, India
    Posts
    66
    This is even more simpler..

    Sub Postal_Verify()
    If Range("D1") Like "[A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9]" Then
    Range("A1") = Left(Range("A1"), 3) & " " & Right(Range("A1"), 3)
    Else
    MsgBox "Invalid Postal Code."
    End If
    End Sub

    Regards,
    Gajendra Gupta

  7. #7
    Registered User
    Join Date
    09-25-2013
    Location
    Ottawa, Canada
    MS-Off Ver
    Excel 2010
    Posts
    2

    Re: Format Canadian Postal Code on Entry

    Please delete
    Last edited by onegr8lady; 06-30-2018 at 02:53 AM.

  8. #8
    Valued Forum Contributor mudraker's Avatar
    Join Date
    11-10-2003
    Location
    Melbourne, Australia
    Posts
    3,983
    Gajendra

    Fantastic bit of code - I would never have thought of using Like

    I have modified my macro to incorporate your code.

    The new macro retains all the requirements as per Gos-C 1st posting and is much simpler than what I had coded


    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim Rng As Range
       Dim iChar As Integer
       
       For Each Rng In Target
          If Rng.Column = 1 Then
             Application.EnableEvents = False
             Select Case Len(Rng.Value)
             Case 6
                Rng.Value = UCase(Left(Rng.Value, 3) & " " & Right(Rng.Value, 3))
             Case 7
                Rng.Value = UCase(Rng.Value)
             End Select
             If Rng.Value Like "[A-Z][0-9][A-Z][ ][0-9][A-Z][0-9]" Then
                'do nothing
             Else
                MsgBox Rng.Address & " - invalid Postcode"
             End If
          End If
       Next Rng
       Application.EnableEvents = True
    End Sub

  9. #9
    Forum Contributor
    Join Date
    09-19-2004
    Location
    Canada
    Posts
    408
    Hi Mudraker,

    This is certainly going to be a popular/much sought-after code. Good job! I think it would be better if the invalid postal code is cleared when the message is shown. Do you mind adding this last bit?

    Gajendra, thanks also for your great input.

    Regards,
    Gos-C
    Last edited by Gos-C; 02-09-2007 at 12:14 PM.

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1