【问题标题】:Access VBA to trim space around a specific character or words(s) in a column访问 VBA 以修剪列中特定字符或单词周围的空间
【发布时间】:2012-01-24 03:58:07
【问题描述】:

我有这段代码,它最初使用替换函数 (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

我将功能从替换更改为修剪,但我做错了。

谢谢大家!

男人

【问题讨论】:

  • 您已标记此 sql,但接受了纯 VBA 答案。此函数是否与查询一起使用?

标签: sql ms-access vba


【解决方案1】:

只是为了补充 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

函数 TrimTrim 不同。 Trim 删除开头和结尾的所有空格以及字符串中的任何双/三/等空格。在你的替换函数中使用vbTextCompare 可以做到这一点,所以“th”的组合无关紧要,所以你不必担心它是“TH”还是“tH”或“Th”等。

【讨论】:

  • 标题写着“Access VBA”,所以我添加了ms-access标签。
  • Remou,access没有trim功能吗?
  • 好的,我检查过了。您必须先参考 Excel。我会改变我的答案以反映这一点。
  • Access 确实具有修剪功能,并且与 Excel 一样,它会修剪前导和尾随空格,但 OP 希望从字符串中间删除空格。通常最好尽可能避免使用外部库。
【解决方案2】:

Trim 仅删除字符串开头和结尾的前导和尾随空格。一个简单的解决方案是:

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

这将删除最多八个空格的间隙。如果您的数据有实际的制表符而不是空格,您需要将“”替换为 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

【讨论】:

  • 非常感谢!完美运行!祝你假期愉快!
  • String to find 也可以传递给函数,因为 OP 提到了“th”和“avenue”。
猜你喜欢
  • 2012-01-23
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 2018-11-23
  • 1970-01-01
相关资源
最近更新 更多