Основная идея была такая: проверить содержимое ячейки, и если это ошибка, то выполнить определенные действия.
В качестве замены был найден вариант:
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound, True, vbTextCompare)) > -1)
End Function
Sub ErCell()
Dim errorArray As Variant
errorArray = Array("#N/A", "#DIV/0!", "#VALUE!", "#NAME?", "#NULL!", "#REF!", "#NUM!")
If IsInArray(ActiveCell.Text, errorArray) Then
ActiveCell.Offset(0, 1).Select
Call Func1(strRefFirstCell, strRefSecondCell, strRefThirdCell)
Else
Call Func2(strRefFirstCell, strRefSecondCell, strRefThirdCell)
End If
End Sub
В Экселе такой код работает, правда не совсем корректно. Если в ячейке попадается цифра 0, то она матчится с ошибкой #DIV/0!, в которой есть эта цифра. Поигрался разными вариантами работы с функцией Filter, но так и не нашел варианта, чтобы искалось совпадение целиком.
А в Либре этот код вообще не хочет работать и на первой же итерации возникает ошибка: "BASIC runtime error. '35' Filter".
Как еще можно обыграть эту ситуацию?