删除VBA for Excel中带有.Replace的字符

删除VBA for Excel中带有.Replace的字符,vba,excel,replace,Vba,Excel,Replace,下面的函数是通过我今天早些时候询问的答案提供给我的 我试图做的是使用VBA从Excel中的字符串中删除一个字符。但是,每当函数运行时,它都会删除存储的值并返回一个#!值错误。我似乎不知道发生了什么事。有人介意解释一个替代方案: Function ReplaceAccentedCharacters(S As String) As String Dim I As Long With WorksheetFunction For I = 1 To Len(S) Select Case

下面的函数是通过我今天早些时候询问的答案提供给我的

我试图做的是使用VBA从Excel中的字符串中删除一个字符。但是,每当函数运行时,它都会删除存储的值并返回一个
#!值
错误。我似乎不知道发生了什么事。有人介意解释一个替代方案:

Function ReplaceAccentedCharacters(S As String) As String
    Dim I As Long

With WorksheetFunction
For I = 1 To Len(S)
    Select Case Asc(Mid(S, I, 1))
        ' Extraneous coding removed. Leaving the examples which 
        ' do work and the one that is causing the problem.
        Case 32
            S = .Replace(S, I, 1, "-")
        Case 94
            S = .Replace(S, I, 1, "/")

        ' This is the coding that is generating the error.
        Case 34
            S = .Replace(S, I, 1, "")
        End Select

    Next I

End With

ReplaceAccentedCharacters = S

End Function
当字符串包含一个
(或十进制字符代码34,十六进制字符代码22…我两者都使用)时,它应该删除引号。但是,Excel会忽略它,并且仍然返回
标记

然后我尝试继续并用另一个值替换
.replace()
子句

        Case 34
            S = .Replace(S, I, 1, "/")
        End Select
使用上面的代码,脚本确实将“替换为/”

最后,我在Stack Overflow中找到了以下示例:

在给出的答案中,我看到了与我给出的代码示例类似的代码示例,但什么都没有。Excel仍然忽略了引号。我甚至用大括号扩展了定义,但仍然没有得到任何结果。

尝试以下方法:

Function blah(S As String) As String
    Dim arr, i

    'array of [replace, with], [replace, with], etc
    arr = Array(Chr(32), "-", Chr(94), "/", Chr(34), "")

    For i = LBound(arr) To UBound(arr) Step 2
        S = Replace(S, arr(i), arr(i + 1))
    Next i

    blah = S
End Function

此函数设计用于将一个字符替换为另一个字符。它不是设计用于将一个字符替换为零。当您尝试将一个字符替换为零时,会发生的情况是,用于迭代单词的计数器现在将查看(在上一次迭代中)对于大于单词长度的字符位置。这将不返回任何内容,当您尝试确定ASC()时,将发生错误。当代码运行时更改字符串长度时,替换例程中的其他错误也将发生

要修改例程以将字符替换为零,我建议如下:

在案例陈述中:

Case 34
        S = .Replace(S, I, 1, Chr(1))
在转让声明中:

ReplaceAccentedCharacters = Replace(S, Chr(1), "")

请注意,VBA替换不同于工作表功能替换

答案确实适用于我最初提出的问题。但当我尝试执行更多操作时,也就是说,添加最后一个选择大小写以删除一个符合理论上应该适用的字符,它不起作用,Excel会向我抛出一个适合它的选项。