String VBA字符串卫生

String VBA字符串卫生,string,vba,excel,String,Vba,Excel,我从Oracle数据库中导入数据,并使用Excel从中创建一些报告。最近,我们的一位数据输入人员开始用“+”开始她的输入。Excel然后计算并添加=然后显示可怕的“名称”错误。错误是错误2029 我试着用 If IsError(C.Value) Then C.Value = Replace(C.Value, "=+", "", 1, -1, vbTextCompare) End If 但这对我没有任何帮助 有什么建议吗?Excel有自己的替换功能: ActiveSheet.Cells.

我从Oracle数据库中导入数据,并使用Excel从中创建一些报告。最近,我们的一位数据输入人员开始用“+”开始她的输入。Excel然后计算并添加=然后显示可怕的“名称”错误。错误是错误2029

我试着用

If IsError(C.Value) Then
    C.Value = Replace(C.Value, "=+", "", 1, -1, vbTextCompare)
End If
但这对我没有任何帮助


有什么建议吗?

Excel有自己的替换功能:

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

如果数据位于文本/CSV文件中,则可以尝试:
data>Import External data>Import data
这将启动一个向导,允许您将特定列指定为文本,并导致Excel无法解析+、-等符号

在VBA中,这可以通过
工作表(“foo”).QueryTables.Add方法完成。有很多选项,但是
TextFileColumnDataTypes
属性允许您指定将哪些列视为文本。通过记录正在使用的向导的宏,然后根据需要编辑宏,可以更容易地了解发生了什么

如果您更直接地读取数据(例如通过ADO或DAO),那么在添加数据之前,只需确保目标单元格为文本格式

工作表(“foo”).单元格(r,c).NumberFormat=“@”


注意:在最初的解决方案中,您几乎肯定希望查看
C.Formula
而不是
C.Value
如果单元格C的公式为
=123+456
,那么
C.Value
将是579,而
C.Formula
将是
=123+456


+1在本上下文中使用内置的
Replace
方法时

还有一件事,它应该是:

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

这是因为=+存储在formula属性中,而不是值中…如果您不想自己在VBA中进行清理,则可以将替换(…)分配给C.value或C.formula。当我运行时,我得到运行时错误“438”OBJECT dosen“不支持此属性或methodoops-请使用“单元格”重试“-返回工作表中所有单元格的范围对象谢谢你,barrowc,你的最终答案成功了,我忘了看.formula而不是.value