通过我今天早些时候提出的答案给了我的以下功能。

我想做的是使用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
.

当字符串包含一个生成的#!VALUE(或十进制的字符代码34,22在十六进制...我使用的两个)时,它应该删除引号。但是,Excel忽略了它,仍然返回"标记。

我试图继续前进并用另一个值替换"子句。

        Case 34
            S = .Replace(S, I, 1, "/")
        End Select
.

使用上面的代码,脚本确实替换了“用/。

我最终在堆栈溢出中找到以下示例: https://stackoverflow.com/a/7386565/692250

在给出的答案中,我看到了与我给出的同样的代码示例和我没有。 Excel仍然忽略了引号。我甚至走到了扩展卷曲牙套的定义,仍然没有得到任何东西。

有帮助吗?

解决方案

旨在将一个字符与另一个功能替换为替换一个字符。它不是旨在替换任何内容的角色。当您尝试替换字符时替换字符的情况是迭代的计数器现在将查看(在最后一次迭代)上,以便大于单词长度的字符位置。没有什么返回,并且当您尝试确定ASC(<< EM>而>)发生错误。当代码运行时,当字符串的长度更改时,还将发生替换例程中的其他误差

修改例程以替换任何内容的字符,我会建议以下内容:

在案例陈述中:

Case 34
        S = .Replace(S, I, 1, Chr(1))
.

和赋值声明:

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

请注意,VBA替换与Worksheetfunction替换

其他提示

试试:

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
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top