Compartilhar via


Como analisar cidade, estado e CEP em valores separados

Versão original do produto: Microsoft Office Access 2003, Microsoft Office Access 2007, Access 2010
Número de KB original: 168798

Resumo

Este artigo fornece um procedimento para analisar uma única variável que contém informações de Cidade, Estado e CEP dos EUA em três variáveis separadas. A rotina dá suporte a:

  • Cep de 5 ou 9 dígitos.
  • Nomes de estado de várias palavras (se precedidos por uma vírgula).
  • Qualquer número de espaços intermediários.

Exemplos de entradas com suporte:

Nova York, Nova Iorque, 99999
Nova York, NY, 99999-9999
Nova York, NY 99999-9999
Nova York NY 99999

Mais informações

AVISO: QUALQUER USO POR VOCÊ DO CÓDIGO/MACRO FORNECIDO NESTE ARTIGO ESTÁ EM SEU PRÓPRIO RISCO. A Microsoft fornece esse código/macro "como está" sem garantia de qualquer tipo, expresso ou implícito, incluindo, mas não se limitando às garantias implícitas de comercialização e/ou aptidão para uma finalidade específica.

OBSERVAÇÃO: No código de exemplo a seguir, um sublinhado (_) no final de uma linha é usado como um caractere de continuação de linha. Para versões do BASIC que não dão suporte a caracteres de continuação de linha, remova o sublinhado do final da linha e mescle com a linha a seguir ao recriar esse código.

Os campos serão analisados na seguinte ordem se nenhuma vírgula for encontrada no endereço: CEP, Estado, Cidade Se pelo menos uma vírgula estiver presente, presume-se que esteja entre Cidade e Estado, e os campos forem analisados em uma ordem diferente: Cidade, Estado, CEP

Exemplo passo a passo

  1. Insira o seguinte código:

    Function CutLastWord (ByVal S As String, Remainder As String) _
             As String
        ' CutLastWord: returns the last word in S.
        ' Remainder: returns the rest.
        '
        ' Words are separated by spaces
        '
        Dim I           As Integer, P As Integer
        S = Trim$(S)
        P = 1
        For I = Len(S) To 1 Step -1
            If Mid$(S, I, 1) = " " Then
                P = I + 1
                Exit For
            End If
        Next I
        If P = 1 Then
            CutLastWord = S
            Remainder = ""
        Else
            CutLastWord = Mid$(S, P)
            Remainder = Trim$(Left$(S, P - 1))
        End If
    End Function
    
    Sub ParseCSZ (ByVal S As String, City As String, State As String, _
        Zip             As String)
        Dim P           As Integer
        '
        ' Check for comma after city name
        '
        P = InStr(S, ",")
        If P > 0 Then
            City = Trim$(Left$(S, P - 1))
            S = Trim$(Mid$(S, P +        '
            ' Check for comma after state
            '
            P = InStr(S, ",")
            If P > 0 Then
                State = Trim$(Left$(S, P - 1))
                Zip = Trim$(Mid$(S, P + 1))
            Else        ' No comma between state and zip
                Zip = CutLastWord(S, S)
                State = S
            End If
        Else        ' No commas between city, state, or zip
            Zip = CutLastWord(S, S)
            State = CutLastWord(S, S)
            City = S
        End If
        '
        ' Clean up any dangling commas
        '
        If Right$(State, 1) = "," Then
            State = RTrim$(Left$(State, Len(State) - 1))
        End If
        If Right$(City, 1) = "," Then
            City = RTrim$(Left$(City, Len(City) - 1))
        End If
    End Sub
    
  2. Para testar, crie um formulário com quatro caixas de texto (txtAddress, txtCity, txtState, txtZip) e um botão de comando. Adicione o seguinte código:

    Sub Command1_Click()
        Dim City        As String, State As String, Zip As String
        ParseCSZ txtAddress, City, State, Zip
        txtCity = City
        txtState = State
        txtZip = Zip
    End Sub
    
  3. Exiba o formulário, digite um endereço em txtAddress e clique no botão de comando. Os outros três campos devem conter os valores analisados.