我正在创建一个 VB 宏,用于将“1+1”等字符串值转换为公式。
Cells(1, 1).Formula = "=" & Cells(1, 1).Value
但是如果无法计算值字符串,则会出现运行时错误“1004”。
我如何确定字符串会成功转换为公式?
首先构造公式,然后对其使用 Evaluate 方法。如果它没有返回错误,那么您可以将其添加到单元格中。
Sub tester()
Dim f As String
f = "1+1"
Debug.Print f, IIf(FormulaOK(f), "OK", "not valid")
f = "1blah1"
Debug.Print f, IIf(FormulaOK(f), "OK", "not valid")
End Sub
Function FormulaOK(f As String) As Boolean
FormulaOK = Not IsError(Application.Evaluate(f))
End Function
如果您需要对单元格的值进行全面验证,那么正则表达式模式可能就是正确的选择 - 这将确保仅使用与您想要的模式匹配的单元格(放置等号可能仍然适用于具有不良格式的单元格,并且您可能想避免这种情况,因为跟踪更改会很困难)。
可以安全地假设这应该适用于带有某种运算符(例如加号或减号)的数值数据吗?
使用 Evaluate 有 2 个问题:
更好的方法是使用 Application.ConvertFormula 并查看是否返回错误。用途:
If IsError(Application.ConvertFormula(sFormula, xlA1, xlA1, , rngCell)) Then ...