在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