Excel 如何检查VBA公式是否正确

Excel 如何检查VBA公式是否正确,excel,vba,excel-2007,Excel,Vba,Excel 2007,我正在创建一个VB宏,它将字符串值(如“1+1”)转换为公式 Cells(1, 1).Formula = "=" & Cells(1, 1).Value 但如果无法计算值字符串,则会出现运行时错误“1004” 如何确保字符串成功转换为公式?如果您需要对单元格的值进行完整验证,那么正则表达式模式可能就是最好的选择-这将确保只使用与您想要的模式匹配的单元格(在具有不可逆格式的单元格中放置等号可能仍然有效,您可能希望避免这种情况,因为跟踪更改将非常困难) 可以安全地假设这适用于带有某种

我正在创建一个VB宏,它将字符串值(如“1+1”)转换为公式

   Cells(1, 1).Formula = "=" & Cells(1, 1).Value
但如果无法计算值字符串,则会出现运行时错误“1004”


如何确保字符串成功转换为公式?

如果您需要对单元格的值进行完整验证,那么正则表达式模式可能就是最好的选择-这将确保只使用与您想要的模式匹配的单元格(在具有不可逆格式的单元格中放置等号可能仍然有效,您可能希望避免这种情况,因为跟踪更改将非常困难)


可以安全地假设这适用于带有某种运算符(如加号或减号)的数值数据吗?

首先构造公式,然后对其使用求值方法。如果它不返回错误,则可以将其添加到单元格中

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方法。如果它不返回错误,则可以将其添加到单元格中。我支持这种方法-可能是答案而不是注释Tim?brettdj,stackoverflow可能会将其强制添加到注释中,因为它是一个简短的答案。请注意,Evaluate方法最多只能包含255个字符rs和so会将任何大于255个字符的字符串报告为无效公式(如果可能有效)。