VBA:删除所有特殊字符的函数
我已经做了一些search解决scheme,我一直没能find我可以直接使用的东西。 因此,通过尝试编辑其他人的代码以供我自己使用,我遇到了一个问题。
我试图使用行RemoveSpecialChars("$C$1")
但我得到一个Object required
错误。
function如下:
Function RemoveSpecialChars(ByVal mfr As Range) Const splChars As String = "!@#$%^&()/" Dim ch As Characters For Each ch In splChars mfr.Replace What:=ch, Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next ch End Function
这是一个简单的问题,但是“$ C $ 1”不被视为一个范围?
谢谢你的帮助。
编辑:如果我使用Function RemoveSpecialChars(mfr As Range)
(没有ByVal
),然后我得到一个Type mismatch
错误。
这进一步导致我相信“$ C $ 1”不被视为一个范围。
EDIT2:
@ sous2817
这是我如何设置stringmfr
用于您的function。
Range("C1").FormulaR1C1 = mfr
这是我如何尝试应用它。
Range("C1").FormulaR1C1 = RemoveSpecialChars(C1)
不要通过“$”。 这对我工作:
=RemoveSpecialChars(C1)
现在,这个开放的代码不能做你想做的事情,因为你只能遍历集合和数组,而不是string。
试试这个(我确定可以清理,但是希望能让你朝着正确的方向前进):
Function RemoveSpecialChars(ByVal mfr As Range) Dim splChars As String Dim ch As Variant Dim splCharArray() As String splChars = "! @ # $ % ^ & () /" splCharArray = Split(splChars, " ") For Each ch In splCharArray mfr.Replace What:=ch, Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next ch RemoveSpecialChars = mfr End Function
如果你从一个子类调用这个,你应该限定你的范围引用,这里有一个方法:
Sub test() Dim test As String test = RemoveSpecialChars(Sheet1.Range("C1")) Debug.Print test End Sub
由于问题更新。 这是另一种方式来填充公式:
Sub test2() Sheet1.Range("D1").Formula = "=RemoveSpecialChars(C1)" End Sub
好的,上次编辑。 如果你想保留string,并创build一个删除特殊字符,你应该采取一个稍微不同的方法。 这是一个方法:
Function RemoveSpecialChars(mfr As Range) Dim splChars As String Dim ch As Variant Dim splCharArray() As String Dim newString As String newString = mfr.Value splChars = "! @ # $ % ^ & () /" splCharArray = Split(splChars, " ") For Each ch In splCharArray newString = Replace(newString, ch, "") Next ch RemoveSpecialChars = newString End Function
“$ C $ 1”不是一个范围,它是一个string
尝试
RemoveSpecialChars(range("$C$1"))
好吧不喜欢以上:我的部分缺乏testing。 下面的工作,但你进入另一个错误的function,我不知道
Set Rng = Range("$C$1") RemoveSpecialChars (Rng)
这可能会慢一些,但是你可以用Ascii数字这样做。 如果你不想使用replace,你也可以这样循环string:
Public Function AlphaNumericOnly(strSource As String) As String Dim i As Integer Dim strResult As String For i = 1 To Len(strSource) Select Case Asc(Mid(strSource, i, 1)) Case 48 To 57, 65 To 90, 97 To 122: 'include 32 if you want to include space strResult = strResult & Mid(strSource, i, 1) End Select Next AlphaNumericOnly = strResult End Function