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