2011-12-18 2 views
34

Я пытаюсь создать фрагмент кода, который заменяет одно слово другим. Пример: Замените Avenue на Ave и North с N. Я использую MS Access, я мог бы использовать функцию SQL REPLACE, но я хочу сделать это в VBA с помощью модуля доступа, чтобы я мог привязать функцию к другому столбцу.Доступ к VBA | Как заменить части строки на другую строку

Я не уверен, с чего начать, поэтому любой ввод будет оценен с большой благодарностью.

Guy

+2

Какой код вы уже написали? –

+0

Как я уже говорил, я мог бы написать это, используя: 'DECLARE @Mymessage varchar (100) SET @Mymessage = 'Я не знаю, как это сделать в VBA. ' SELECT REPLACE (@Mymessage,' know ',' understand ') ' Опять же, я не уверен, как записать это в VBA в модуле. Спасибо за ваше время. – Asynchronous

+0

См. Также http://stackoverflow.com/questions/8571192/access-vba-to-trim-space-around-a-specific-character-or-wordss-in-a-column/8571442#8571442 – Fionnuala

ответ

54

функция VBA Используйте доступ Replace(text, find, replacement):

Dim result As String 

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

Я должен был бы объяснил лучше, скажем, у меня есть имя столбца. Я просто пытаюсь заменить Avenue в столбце адреса. Вы самые яркие! Спасибо за ваш ценный вклад. – Asynchronous

+0

В этом случае сделайте это в TSQL –

+0

Вот мое решение! Спасибо, что помогли мне с этим: мы все должны ползать, прежде чем мы сможем ходить. Public Function TrmChar (ReplaceChar As String) ReplaceChar = Replace (ReplaceChar "Авеню", "Ave") TrmChar = ReplaceChar End Function – Asynchronous

1

Вы можете использовать функцию, подобную этой же, это позволит вам добавлять в различных случаях, когда вы хотели бы изменить значение:

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 

Тогда ваш SQL будет читать что-то вроде:

SELECT strReplace(Address) As Add FROM Tablename 
+0

Чтобы добавить к этому ответу. 1. Случай может принимать несколько аргументов: например. CASE "Avenue", "Ave." 2. Дело имеет значение. Используйте lcase или ucase со своими сравнениями – ray

1

Поскольку строка «Север» может быть началом названия улицы, например. «Северный бульвар», уличные направления всегда находятся между номером улицы и названием улицы и отделены от номера улицы и названия улицы.

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

Я читал эту тему и хотел бы добавить информацию, хотя она, безусловно, уже не является своевременной для OP.

BiggerDon выше указывает на трудности, связанные с заменой «Север» на «N». Аналогичная проблема существует с «Авеню» на «Авеню» (например, «Авеню Северной и Южной Америки» становится «Авеню Америк»: все еще понятна, но, вероятно, не то, что хочет OP.

Функция replace() полностью контекст-бесплатный, но адресов нет. Полное решение должно иметь дополнительную логику для правильной интерпретации контекста, а затем применять replace() по мере необходимости.

Базы данных обычно содержат адреса, и поэтому я хотел бы указать, что обобщенная версия проблемы OP применительно к адресам в Соединенных Штатах была адресована (юмором!) системой поддержки точности кодирования (CASS). CASS - это инструмент базы данных, который принимает адрес США и завершает или исправляет его в соответствии со стандартом установленный Почтовой службой США. Запись в Википедии https://en.wikipedia.org/wiki/Postal_address_verification имеет основы, а дополнительную информацию можно получить в почтовом отделении: https://ribbs.usps.gov/index.cfm?page=address_info_systems

Смежные вопросы