VBA字符串清理

3
我从Oracle数据库中导入数据,并使用Excel创建一些报告。最近,我们的一个数据录入人员开始以“+”开头输入内容。然后Excel会对此进行评估并添加=,然后显示可怕的?name#错误。该错误是2029错误。
我尝试使用
If IsError(C.Value) Then
    C.Value = Replace(C.Value, "=+", "", 1, -1, vbTextCompare)
End If

但这并没有帮助我解决问题。
有什么建议吗?
3个回答

2

Excel有自己的替换函数:

ActiveSheet.Cells.Replace What:="=+", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

当我运行它时,出现运行时错误'438',对象不支持此属性或方法。 - CABecker
请再试一次,使用“Cells” - 它将返回工作表中所有单元格的范围对象。 - DJ.

1
如果您的数据在文本/CSV文件中,则可以尝试:Data>导入外部数据>导入数据。这将启动一个向导,让您指定特定列为文本,并使Excel不解析+、-等符号。
在VBA中,可以通过Worksheet("foo").QueryTables.Add方法完成此操作。有很多选项,但TextFileColumnDataTypes属性允许您指定要作为文本处理的列。通过记录使用向导的宏,然后编辑以适应可能更容易了解正在发生的情况。
如果您直接读取数据(例如通过ADO或DAO),则只需确保目标单元格处于文本格式,然后再添加数据。
Worksheet("foo").Cells(r, c).NumberFormat = "@"

在您的原始解决方案中,您几乎肯定想要查看C.Formula而不是C.Value。如果单元格C具有公式=123+456,那么C.Value将为579,而C.Formula将为=123+456

+1建议在此上下文中使用内置的Replace方法


谢谢barrowc,你的最终答案解决了问题,我忘记看.formula而不是.value。 - CABecker

0

还有一件事,它应该是:

If IsError(C.Value) Then
    C.Value = Replace(C.Formula, "=+", "", 1, -1, vbTextCompare)
End If

这是因为 =+ 存储在公式属性中,而不是值中...如果您不想在 VBA 中自己清理,请将 replace(...) 分配给 C.Value 或 C.Formula


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接