tla*_*law 3 excel vba excel-vba
我正在清理一大堆充满符号字符的数据.!@%^&*|'~<>?·并希望一次删除它们.下面的脚本似乎有效地这样做,然后它继续删除工作簿的全部内容.
Sub Removeforeigncharacters()
Dim ForeignChars As String
Dim RegChars As String
ForeignChars = "!@%^&*|`~<>?·"
RegChars = ""
Set MyRange = ActiveSheet.UsedRange
Dim A As String * 1
Dim B As String * 1
Dim i As Integer
For i = 1 To Len(ForeignChars)
A = Mid(ForeignChars, i, 1)
B = Mid(RegChars, i, 1)
MyRange.Replace What:=A, Replacement:=B, LookAt:=xlPart, MatchCase:=False
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
所述What的参数Range.Replace使用*作为通配符,这意味着它将每一个字符匹配(和它们代替它们).请注意,这在技术上不会删除字符,因为您使用的是固定长度的字符串 - 它会用空格替换它们,因为代码...
B = Mid(RegChars, i, 1)
Run Code Online (Sandbox Code Playgroud)
...总是会产生一个空间.
如果您需要搜索文字*而不是通配符匹配,则需要转义它们:
Dim A As String
Dim i As Integer
For i = 1 To Len(ForeignChars)
A = Mid(ForeignChars, i, 1)
If A Like "[~*?`]" Then A = "~" & A
MyRange.Replace What:=A, Replacement:=vbNullString, LookAt:=xlPart, MatchCase:=False
Next
Run Code Online (Sandbox Code Playgroud)
(我可能错过了一些需要逃避的事情).
请注意,如果您这样做,则不能将其声明A为固定长度的字符串(无论如何,确实没有令人信服的理由).