Access VBA | 如何用另一个字符串替换字符串的一部分

43

我正在尝试创建一段代码,将一个单词替换为另一个单词。例如:用 Ave 替换 Avenue,用 N 替换 North。

我正在使用 MS Access,虽然我可以使用 SQL REPLACE 函数,但我想使用 Access 模块中的 VBA 来完成此操作,以便将该函数附加到其他列。

我不确定从何处开始,因此非常感谢任何建议。

Guy


2
你目前写了什么代码? - Cody Gray
正如我所提到的,我可以使用以下代码编写:DECLARE @Mymessage varchar(100) SET @Mymessage = ‘I do not know how to do this in VBA. ‘ SELECT REPLACE(@Mymessage, ‘know’, ‘understand’)但我不确定如何在VBA模块中编写此代码。感谢您的时间。 - Asynchronous
请参见http://stackoverflow.com/questions/8571192/access-vba-to-trim-space-around-a-specific-character-or-wordss-in-a-column/8571442#8571442。 - Fionnuala
4个回答

65

使用 Access 的 VBA 函数 Replace(text, find, replacement)


Dim result As String

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

我应该解释得更清楚,比如说我有一个列名为“地址”。我只是想在地址列中替换掉“大道”这个词。你真是最聪明的!感谢您宝贵的建议。 - Asynchronous
这是我的解决方案!感谢您帮助我:我们都必须先爬行才能行走。公共函数 TrmChar(ReplaceChar As String) ReplaceChar = Replace(ReplaceChar, "Avenue", "Ave") TrmChar = ReplaceChar 结束函数 - Asynchronous

4
我正在阅读这个帖子,虽然对于原帖已经不再适用,但我想添加一些信息。BiggerDon指出了将“North”替换为“N”的困难之处。同样的问题也存在于将“Avenue”替换为“Ave”(例如,“Avenue of the Americas”变成了“Ave of the Americas”:仍然可以理解,但可能不是原帖想要的)。replace()函数完全是无上下文的,但地址不是。一个完整的解决方案需要有额外的逻辑来正确解释上下文,然后根据需要应用replace()。
数据库通常包含地址信息,因此我想指出,针对美国地址的广义版本问题已经得到了解决(开玩笑!)——通过编码准确性支持系统(CASS)。 CASS是一个数据库工具,接受美国地址并将其完成或更正以符合美国邮政服务局制定的标准。 维基百科条目 https://en.wikipedia.org/wiki/Postal_address_verification 中有基础知识,更多信息可在邮局网站上获得:https://ribbs.usps.gov/index.cfm?page=address_info_systems

2

由于字符串“North”可能是街道名称的开头,例如“Northern Boulevard”,因此街道方向始终位于街道编号和街道名称之间,并与街道编号和街道名称分开。

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
您可以使用类似于这样的函数,它允许您添加不同的情况来更改值:
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

补充此答案。1. Case 可以接受多个参数:例如 CASE "Avenue", "Ave." 2. 大小写敏感。在比较中使用 lcase 或 ucase。 - ray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接