#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:
Если вам нужно выполнить полную проверку значения ячейки, тогда может подойти шаблон регулярных выражений — это гарантирует, что будут использоваться только ячейки, соответствующие нужному шаблону (размещение знака равенства может по-прежнему работать в ячейках с неизменяемыми форматами, и вы можете избежать этого, поскольку отслеживание изменений будетбыть жестким).
Можно ли с уверенностью предположить, что это должно применяться к числовым данным с каким-либо оператором типа плюс или минус?