2011-12-18 17 views
34

Estoy tratando de crear una pieza de código que reemplace una palabra por otra. Ejemplo: Reemplace Avenue con Ave y North con N. Estoy usando MS Access, podría usar la función SQL REPLACE, pero quiero hacer esto en VBA usando el módulo Access para poder adjuntar la función a otra columna.Acceso a VBA | Cómo reemplazar partes de una cadena con otra cadena

No estoy seguro por dónde empezar con esto, por lo que cualquier contribución será muy apreciada.

individuo

+2

¿Qué código ha escrito hasta ahora? –

+0

Como mencioné, podría escribir esto usando: 'DECLARAR @Mymessage varchar (100) SET @Mymessage = 'No sé cómo hacer esto en VBA. ' SELECCIONAR REEMPLAZAR (@Mymessage,' saber ',' entender ') ' De nuevo, no estoy seguro de cómo escribir esto en VBA en un módulo. Gracias por su tiempo. – Asynchronous

+0

Vea también http://stackoverflow.com/questions/8571192/access-vba-to-trim-space-around-a-specific-character-or-wordss-in-a-column/8571442#8571442 – Fionnuala

Respuesta

54

función de VBA de Uso Acceso Replace(text, find, replacement):

Dim result As String 

result = Replace("Some sentence containing Avenue in it.", "Avenue", "Ave") 
+0

Debería tener Explicado mejor, decir que tengo un nombre de columna Dirección. Simplemente estoy tratando de reemplazar Avenue en la columna de dirección. ¡Tú eres el más brillante! Gracias por tu valioso aporte. – Asynchronous

+0

En ese caso, hágalo en TSQL –

+0

¡Aquí está mi solución! Gracias por ayudarme con esto: todos debemos gatear antes de poder caminar. Función Pública TrmChar (ReplaceChar como secuencia) ReplaceChar = Reemplazar (ReplaceChar, "Avenida", "Ave") TrmChar = ReplaceChar End Function – Asynchronous

1

Se podría utilizar una función similar a esto también, sería permitirá añadir en diferentes casos en los que le gustaría cambiar valores:

Public Function strReplace(varValue As Variant) as Variant 

    Select Case varValue 

     Case "Avenue" 
      strReplace = "Ave" 

     Case "North" 
      strReplace = "N" 

     Case Else 
      strReplace = varValue 

    End Select 

End Function 

Entonces su SQL podría decir algo como:

SELECT strReplace(Address) As Add FROM Tablename 
+0

Para añadir a esta respuesta. 1. Case puede aceptar múltiples argumentos: p. CASO "Avenue", "Ave." 2. El caso importa. Use lcase o ucase con sus comparaciones – ray

1

Dado que la cadena "Norte" puede ser el comienzo del nombre de una calle, p. "Northern Boulevard", las indicaciones de las calles siempre se encuentran entre el número de la calle y el nombre de la calle, y están separadas del número de la calle y del nombre de la calle.

Public Function strReplace(varValue As Variant) as Variant 

Select Case varValue 

    Case "Avenue" 
     strReplace = "Ave" 

    Case " North " 
     strReplace = " N " 

    Case Else 
     strReplace = varValue 

End Select 

End Function 
2

Estaba leyendo este hilo y me gustaría añadir información aunque seguramente ya no sea oportuno para el OP.

BiggerDon arriba señala la dificultad de reemplazar "North" por "N". Existe un problema similar con "Avenida" a "Ave" (por ejemplo, "Avenida de las Américas" se convierte en "Ave de las Américas": aún comprensible, pero probablemente no lo que quiere el OP.

La función replace() es completamente sin contexto, pero las direcciones no lo son. Una solución completa debe tener lógica adicional para interpretar el contexto correctamente y luego aplicar replace() según sea necesario.

Las bases de datos contienen direcciones, por lo que quería señalar que El Sistema de Soporte de Precisión de Codificación (CASS) ha abordado la versión generalizada del problema del PO aplicado a direcciones dentro de los Estados Unidos. ¡CASS es una herramienta de base de datos que acepta una dirección de EE. UU. y la completa o corrige para cumplir un estándar establecido por el Servicio Postal de los Estados Unidos. La entrada de Wikipedia https://en.wikipedia.org/wiki/Postal_address_verification tiene los conceptos básicos, y hay más información disponible en la Oficina de correos: https://ribbs.usps.gov/index.cfm?page=address_info_systems

Cuestiones relacionadas