VBA字符串卫生

时间:2009-02-06 17:31:41

标签: string vba excel-vba excel

我从Oracle数据库导入数据并使用Excel从中创建一些报告。最近,我们的一位数据录入人员开始使用“+”开始输入。 Excel比评估和添加=然后显示可怕的?name#error。错误是错误2029.

我尝试使用

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

但这并没有让我到处都是。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

Excel拥有自己的替换功能:

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

答案 1 :(得分:1)

如果您有文本/ CSV文件中的数据,那么您可以尝试:Data > Import External Data > Import 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方法

答案 2 :(得分:0)

另外一件事,应该是:

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

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