5

我编写了这个函数来删除字符串开头和结尾的空格,有什么想法为什么它不起作用?

Public Function PrepareString(TextLine As String)

    Do While Left(TextLine, 1) = " " ' Delete any excess spaces
        TextLine = Right(TextLine, Len(TextLine) - 1)
    Loop
    Do While Right(TextLine, 1) = " " ' Delete any excess spaces
        TextLine = Left(TextLine, Len(TextLine) - 1)
    Loop

    PrepareString = TextLine

End Function
4

3 回答 3

15

我测试了你的功能,它在我的机器上运行良好。

您可以使用为您执行此操作的内置Trim()函数,而不是创建执行相同操作的 UDF。

Trim(TextLine)

参考:http ://www.techonthenet.com/excel/formulas/trim.php

于 2012-09-29T13:24:24.330 回答
3

这个怎么样。请注意 Worksheetfunction.Trim 的使用,它删除了 Application.Trim 没有的多个空格。

Option Explicit

Dim oRegex As Object

Sub test()
Dim dirtyString As String

    dirtyString = "   This*&(*&^% is_                          The&^%&^%><><.,.,.,';';';  String   "
    Debug.Print cleanStr(dirtyString)
End Sub

Function cleanStr(ByVal dirtyString As String) As String

    If oRegex Is Nothing Then Set oRegex = CreateObject("vbscript.regexp")
    With oRegex
        .Global = True
        'Allow A-Z, a-z, 0-9, a space and a hyphen -
        .Pattern = "[^A-Za-z0-9 -]"
        cleanStr = .Replace(dirtyString, vbNullString)
    End With
    cleanStr = WorksheetFunction.Trim(cleanStr)
End Function
于 2012-09-29T14:24:25.483 回答
1

为什么不是这个?

Public Function PrepareString(TextLine As String)
    PrepareString = Trim(TextLine)
End Function

Alexandre/slaver113 是绝对正确的,将内置函数包装在 UDF 中没有任何意义。我这样做的原因是为了指出如何使您的 UDF 工作。在现实生活中,我永远不会以这种方式使用 UDF。:)

于 2012-09-29T13:24:17.810 回答