Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Versión original del producto: Microsoft Office Access 2003, Microsoft Office Access 2007, Access 2010
Número de KB original: 168798
Resumen
En este artículo se proporciona un procedimiento para analizar una única variable que contiene información de la ciudad de EE. UU., el estado y el código postal en tres variables independientes. La rutina admite:
- Código postal de 5 o 9 dígitos.
- Nombres de estado de varias palabras (si van precedidos de una coma).
- Cualquier número de espacios intermedios.
Ejemplos de entradas admitidas:
Nueva York, Nueva York, 99999
Nueva York, NY, 99999-9999
Nueva York, NY 99999-9999
Nueva York NY 99999
Más información
ADVERTENCIA: CUALQUIER USO POR SU PARTE DEL CÓDIGO O LA MACRO QUE SE PROPORCIONA EN ESTE ARTÍCULO CORRE SU PROPIO RIESGO. Microsoft proporciona este código o macro "tal cual" sin garantía de ningún tipo, ya sea expresa o implícita, incluidas, entre otras, las garantías implícitas de comerciabilidad o idoneidad para un propósito determinado.
NOTA: En el código de ejemplo siguiente, se usa un carácter de subrayado (_) al final de una línea como carácter de continuación de línea. Para las versiones de BASIC que no admiten caracteres de continuación de línea, quite el carácter de subrayado del final de la línea y combine con la siguiente línea al volver a crear este código.
Los campos se analizan en el orden siguiente si no se encuentra ninguna coma en la dirección: Código postal, Estado, Ciudad Si hay al menos una coma, se supone que está entre Ciudad y Estado, y los campos se analizan en un orden diferente: Ciudad, Estado, Código postal
Ejemplo paso a paso
Escriba el código siguiente:
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
Para probar, cree un formulario con cuatro cuadros de texto (txtAddress, txtCity, txtState, txtZip) y un botón de comando. Agregue el código siguiente:
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
Muestre el formulario, escriba una dirección en txtAddress y haga clic en el botón de comando. Los otros tres campos deben contener los valores analizados.