删除与vba的字符以获得Excel
题
通过我今天早些时候提出的答案给了我的以下功能。
我想做的是使用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
. 不隶属于 StackOverflow