+ Reply to Thread
Results 1 to 27 of 27

Format Canadian Postal Code on Entry

Hybrid View

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

    Try this macro - It does not verify Letters & Number are placed in the correct order - This can be added if required.

    Copy this macro
    Goto Excel
    Right Click on Sheet Name Tab > select View Code
    Past macro into the Worksheet Module displayed

    Change Column number to suit (shown In red in this posting)
    Return to Excel and test


    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim Rng As Range
       
       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
          End If
       Next Rng
       Application.EnableEvents = True
    End Sub

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

    Thank you very much. It works but, if you don't mind, can you add the verification of the letters and numbers in the correct order. That would be perfect. I really appreciate your help.

    Thanks again,
    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."

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

    This version verifies letters, numbers, space in correct location.

    Change Column number to suit

    For invalid Postcode entries if you remove the ' before 'rng.ClearContents it will clear the entry


    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 Mid(Rng.Value, iChar, 1)
                   Case 1, 3, 4, 6
                      MsgBox Rng.Address & " - " & Mid(Rng.Value, iChar, 1) _
                      & " is invalid for Postcode"
                      'rng.ClearContents
                      Exit For
                   MsgBox Rng.Address & " - " & Mid(Rng.Value, iChar, 1) _
                      & " is invalid for Postcode"
                      'rng.ClearContents
                      Exit For
                   End Select
                Case " "
                   Select Case Mid(Rng.Value, iChar, 1)
                   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

  4. #4
    Forum Expert oldchippy's Avatar
    Join Date
    02-14-2005
    Location
    Worcester, UK
    MS-Off Ver
    Excel 2007 (Home)
    Posts
    7,097
    Here's an alternative if you require a formula, with your data entry in A1, then this in B1

    =LEFT(UPPER(A1),3)&" "&RIGHT(UPPER(A1),3)
    oldchippy
    -------------


    Blessed are those who can give without remembering and take without forgetting

    If you are happy with the help you have received, please click the <--- STAR icon on the left - Thanks.

    Click here >>> Top Excel links for beginners to Experts

    Forum Rules >>>Please don't forget to read these

  5. #5
    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

  6. #6
    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

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

    Gos-C

  8. #8
    Registered User
    Join Date
    02-19-2013
    Location
    Vancouver, Canada
    MS-Off Ver
    Excel 2011
    Posts
    1

    Re: Format Canadian Postal Code on Entry

    Quote Originally Posted by mudraker View Post
    Gos-C

    Try this macro - It does not verify Letters & Number are placed in the correct order - This can be added if required.

    Copy this macro
    Goto Excel
    Right Click on Sheet Name Tab > select View Code
    Past macro into the Worksheet Module displayed

    Change Column number to suit (shown In red in this posting)
    Return to Excel and test


    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim Rng As Range
       
       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
          End If
       Next Rng
       Application.EnableEvents = True
    End Sub
    Hi Mudraker,

    This work is fantastic and thank you in advance on behalf of all Canadian excel users who have been loosing sleep in trying to automate the post code entry/ format process!

    I am a Excel 2011 for Mac user and when I right click on the Sheet Tab, I do not have an option to View Code. I tried pasting the code into the macro record window but now every entry in the sheet comes up with an 'Invalid Postal Code' error.

    Could you please offer some (more!) guidance?

  9. #9
    Registered User
    Join Date
    02-27-2013
    Location
    Canada
    MS-Off Ver
    Excel 2010
    Posts
    13

    Re: Format Canadian Postal Code on Entry

    Does anyone know if I can use this code to force postal code entry in a user form text box?

+ 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