Как проверить правильность формулы VBA

#excel #vba #excel-2007

#excel #vba #excel-2007

Вопрос:

Я создаю макрос VB, который преобразует строковые значения типа «1 1» в формулы.

    Cells(1, 1).Formula = "=" amp; Cells(1, 1).Value
 

Но если строка значения не может быть вычислена, у меня возникает ошибка времени выполнения «1004».

Как я могу быть уверен, что строка будет успешно преобразована в формулу?

Комментарии:

1. Сначала создайте формулу, а затем используйте для нее метод Evaluate . Если она не возвращает ошибку, вы можете добавить ее в ячейку.

2. Я поддерживаю этот подход — возможно, ответ, а не комментарий Тима?

3. brettdj, stackoverflow, возможно, вставил его в комментарий, поскольку это был короткий ответ.

Ответ №1:

Сначала постройте формулу, а затем используйте для нее метод оценки. Если она не возвращает ошибку, вы можете добавить ее в ячейку.

 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
 

Комментарии:

1. Имейте в виду, что метод Evaluate ограничен максимум 255 символами и поэтому сообщит о любой строке, превышающей 255 символов, как о недопустимой формуле, когда она может быть действительной.

Ответ №2:

Если вам нужно выполнить полную проверку значения ячейки, тогда может подойти шаблон регулярных выражений — это гарантирует, что будут использоваться только ячейки, соответствующие нужному шаблону (размещение знака равенства может по-прежнему работать в ячейках с неизменяемыми форматами, и вы можете избежать этого, поскольку отслеживание изменений будетбыть жестким).

Можно ли с уверенностью предположить, что это должно применяться к числовым данным с каким-либо оператором типа плюс или минус?