我已经为此寻找了一些解决方案,但无法找到可以直接使用的东西。因此,通过尝试编辑别人的代码供我自己使用,我遇到了一个问题。
我正在尝试使用该线路RemoveSpecialChars("$C$1"),但出现Object required错误。
函数如下:
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
Run Code Online (Sandbox Code Playgroud)
这是一个简单的问题,但是“$C$1”不被认为是一个范围吗?
感谢您的帮助。
编辑:如果我使用Function RemoveSpecialChars(mfr As Range)(不带ByVal),则会收到Type mismatch错误。
这进一步让我相信“$C$1”不被视为一个范围。
编辑2:
@sous2817
这就是我设置mfr与您的函数一起使用的字符串的方法。
Range("C1").FormulaR1C1 = mfr
Run Code Online (Sandbox Code Playgroud)
这就是我尝试应用它的方式。
Range("C1").FormulaR1C1 = RemoveSpecialChars(C1)
Run Code Online (Sandbox Code Playgroud)
不要传递“$”。这对我有用:
=RemoveSpecialChars(C1)
Run Code Online (Sandbox Code Playgroud)
现在,这带来了其他问题,因为代码无法执行您希望它执行的操作,因为您只能迭代集合和数组,而不能迭代字符串。
试试这个(我确信可以清理,但希望能让你朝着正确的方向前进):
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
Run Code Online (Sandbox Code Playgroud)
如果您从子系统中调用此函数,则应该限定您的范围引用,这是一种方法:
Sub test()
Dim test As String
test = RemoveSpecialChars(Sheet1.Range("C1"))
Debug.Print test
End Sub
Run Code Online (Sandbox Code Playgroud)
由于问题更新。这是填充公式的另一种方法:
Sub test2()
Sheet1.Range("D1").Formula = "=RemoveSpecialChars(C1)"
End Sub
Run Code Online (Sandbox Code Playgroud)
好的,最后一次编辑。如果您想保留字符串并创建一个删除特殊字符的字符串,则应该采取稍微不同的方法。这是一种方法:
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
Run Code Online (Sandbox Code Playgroud)