我有这段代码最初使用替换功能(VBA)来替换MS Access中字符串或列字段中的某些字符。代码在一个模块中。
我需要修改代码,以便修剪某些字符周围的空间。例如,如果单独出现 th ,请从左侧修剪空格,以便与数字冲刷。如果右侧有多个制表符(空格),请对其进行修剪,使右侧只有一个制表符空格。对于 avenue 也是如此,修剪它以使左侧和右侧有一个标签空间。
这是我写的:
Public Function TrmSpace(RemoveSpace As String) As String
Dim UserEntry As Variant, CorrectedEntry As Variant
Dim i As Long
ExpectedEntry = Array("th ", " th", " th ", "TH")
CorrectedEntry = Array("th", "th", "th", "th")
TrmSpace = RemoveSpace
For i = 0 To 3
TrmSpace = Trim(TrmSpace, ExpectedEntry(i), CorrectedEntry(i), Compare:=vbTextCompare)
Next
End Function
我将功能从Replace更改为Trim,但我做错了。
谢谢大家!
盖
答案 0 :(得分:2)
只是为了补充Jesse的答案。您可以简单地执行以下操作(参考Excel),而不是进行如此多的替换:
Public Function TrmSpace(RemoveSpace As String) As String
RemoveSpace = Excel.Application.WorksheetFunction.Trim(RemoveSpace)
RemoveSpace = Replace(RemoveSpace," th","th",,,vbTextCompare)
TrmSpace = RemoveSpace
End Function
excel函数Trim
与vba Trim
不同。 excel Trim
删除了开头和结尾处的所有空格以及字符串中的任何double / triple / etc空格。在你的替换函数中使用vbTextCompare
会使它与“th”的混合无关紧要,所以你不必担心它是“TH”,“tH”还是“Th”,等
答案 1 :(得分:1)
修剪仅从字符串的开头和结尾删除前导和尾随空格。一个简单的解决方案是:
Public Function TrmSpace(RemoveSpace As String) As String
RemoveSpace = Replace(RemoveSpace, " ", " ")
RemoveSpace = Replace(RemoveSpace, " ", " ")
RemoveSpace = Replace(RemoveSpace, " ", " ")
RemoveSpace = Replace(RemoveSpace, " th", "th")
RemoveSpace = Replace(RemoveSpace, " TH", "th")
TrmSpace = RemoveSpace
End Function
这样可以消除最多8个空格的间隙。如果您的数据有实际的制表符而不是空格,则需要用vbTab&替换“”。 vbTab& vbTab& vbTab。
一行代码可以将任意数量的重复空格“挤压”到一个空格,另一行代码可以移除th
的前导空格,无论如何,从而减少了上述内容:
Public Function TrmSpace(RemoveSpace As String) As String
TrmSpace = Replace$(Replace$(Replace$(RemoveSpace, Chr$(32), Chr$(32) & Chr$(22)), _
Chr$(22) & Chr$(32), vbNullString), Chr$(22), vbNullString)
TrmSpace = Replace$(TrmSpace, " th", "th", , , vbTextCompare)
End Function