如何检查VBA公式是否正确

问题描述 投票:0回答:3

我正在创建一个 VB 宏,用于将“1+1”等字符串值转换为公式。

   Cells(1, 1).Formula = "=" & Cells(1, 1).Value

但是如果无法计算值字符串,则会出现运行时错误“1004”。

我如何确定字符串会成功转换为公式?

excel vba excel-2007
3个回答
6
投票

首先构造公式,然后对其使用 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

0
投票

如果您需要对单元格的值进行全面验证,那么正则表达式模式可能就是正确的选择 - 这将确保仅使用与您想要的模式匹配的单元格(放置等号可能仍然适用于具有不良格式的单元格,并且您可能想避免这种情况,因为跟踪更改会很困难)。

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


0
投票

使用 Evaluate 有 2 个问题:

  1. 您无法判断一个公式在语法上是否无效,或者只是一个当前返回错误值的有效公式(例如 =na())
  2. 调用 Evaluate 有副作用。它可能会调用计算事件,可能会导致计算单元格中的值,即使 Application.Calculate 设置为手动也是如此。

更好的方法是使用 Application.ConvertFormula 并查看是否返回错误。用途:

 If IsError(Application.ConvertFormula(sFormula, xlA1, xlA1, , rngCell)) Then ...
© www.soinside.com 2019 - 2024. All rights reserved.