我已经做了一些寻找解决方案,但我找不到可以直接使用的东西。因此,通过尝试编辑别人的代码供我自己使用,我遇到了一个问题。
我正在尝试使用第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
这是一个简单的问题,但是“$ C $ 1”不被视为范围?
感谢您的帮助。
修改:如果我使用Function RemoveSpecialChars(mfr As Range)
(没有ByVal
),则会出现Type mismatch
错误。
这进一步让我相信“$ C $ 1”不被视为范围。
EDIT2:
@ sous2817
这是我设置要与您的函数一起使用的字符串mfr
的方法。
Range("C1").FormulaR1C1 = mfr
这就是我尝试应用它的方式。
Range("C1").FormulaR1C1 = RemoveSpecialChars(C1)
答案 0 :(得分:4)
不要传递“$”。这对我有用:
=RemoveSpecialChars(C1)
现在这会打开其他问题,因为代码不会按照您的意愿执行,因为您只能迭代集合和数组,而不是字符串。
尝试这个(我确信可以清理,但希望能让你朝着正确的方向前进):
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调用它,你应该限定你的范围参考,这是一种方式:
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
好的,上次编辑。如果要保留字符串并创建一个删除了特殊字符的字符串,则应采用稍微不同的方法。这是一种方式:
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
答案 1 :(得分:1)
这可能会慢一些,但您可以使用Ascii数字这样做。如果您不想使用replace:
,也可以通过这种方式循环字符串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
答案 2 :(得分:0)
" $ C $ 1和#34;不是范围它是一个字符串
尝试
RemoveSpecialChars(range("$C$1"))
好吧不喜欢上面的内容:我缺乏测试。以下工作,但你进入另一个错误的功能,我不确定
Set Rng = Range("$C$1")
RemoveSpecialChars (Rng)