在Excel 2010中使用宏,我试图替换所有"无效"带有空格的字符(由命名范围定义)。
Dim sanitisedString As String
sanitisedString = Application.WorksheetFunction.Clean(uncleanString)
Dim validCharacters As Range
Set validCharacters = ActiveWorkbook.Names("ValidCharacters").RefersToRange
Dim pos As Integer
For pos = 1 To Len(sanitisedString)
If WorksheetFunction.CountIf(validCharacters, Mid(sanitisedString, pos, 1)) = 0 Then
sanitisedString = WorksheetFunction.Replace(sanitisedString, pos, 1, " ")
End If
Next
它适用于除*和?之外的所有字符,因为CountIf将这些字符解释为通配符。
我尝试使用以下方法转义CountIf中的所有字符:
If WorksheetFunction.CountIf(validCharacters, "~" & Mid(sanitisedString, pos, 1)) = 0
但这会导致所有字符被替换,无论它们是否在列表中。
然后我尝试做两个单独的Substitute命令,放在for循环之后使用"〜*"和"〜?":
sanitisedString = WorksheetFunction.Substitute(sanitisedString, "~*", " ")
sanitisedString = WorksheetFunction.Substitute(sanitisedString, "~?", " ")
但*和?仍然能够完成。
我做错了什么?
答案 0 :(得分:2)
由于只需要担心两个通配符,您可以明确地测试这些通配符:
Dim character As String
For pos = 1 To Len(sanitisedString)
character = Mid(sanitisedString, pos, 1)
If character = "*" Or character = "?" Then character = "~" & character
If WorksheetFunction.CountIf(validCharacters, character) = 0 Then
Mid$(sanitisedString, pos, 1) = " "
End If
Next