我通过今天早些时候提出的答案向我提供了以下功能。
我尝试做的是使用VBA从Excel中的字符串中删除字符。但是,每当函数运行时,它最终都会删除存储的值并返回#!VALUE
错误。我似乎无法弄清楚发生了什么。任何人都在解释另一种选择:
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中找到了以下示例: https://stackoverflow.com/a/7386565/692250
在给出的答案中,我看到的代码示例与我给出的代码相同,没有任何内容。 Excel仍然忽略引号。我甚至用花括号扩展了定义,但仍然没有得到任何东西。
答案 0 :(得分:2)
试试这个:
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
答案 1 :(得分:1)
此功能旨在将一个角色替换为另一个角色。它的目的不是用一无所有的方式取代一个角色。当你试图用什么都没有替换一个字符时会发生什么呢?迭代通过这个单词的计数器现在看起来(在最后一次迭代)对于一个大于单词长度的字符位置。什么都不返回,当您尝试确定ASC(< nothing >)时会发生错误。当代码运行时更改字符串的长度时,也会发生替换例程中的其他错误
要修改例程以无任何替换字符,我建议如下:
在案例陈述中:
Case 34
S = .Replace(S, I, 1, Chr(1))
在作业陈述中:
ReplaceAccentedCharacters = Replace(S, Chr(1), "")
请注意,VBA Replace与Worksheetfunction Replace
不同