在Excel 2010 vbamacros中replace通配符(?和*)
在Excel 2010中使用macros,我试图用空格replace所有“无效的”字符(由命名的范围定义)。
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
但是这导致所有的字符被replace,不pipe它们是否在列表中。
然后我试着做两个单独的替代命令,放在for循环之后,使用“〜*”和“〜?”:
sanitisedString = WorksheetFunction.Substitute(sanitisedString, "~*", " ") sanitisedString = WorksheetFunction.Substitute(sanitisedString, "~?", " ")
但是*和? 仍然通过。
我究竟做错了什么?
既然只有两个通配符需要担心,你可以明确地testing一下:
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