O operador VBA “And” avalia o segundo argumento quando o primeiro é fals
Function Foo(thiscell As Range) As Boolean
Foo = thiscell.hasFormula And (InStr(1, UCase(Split(thiscell.formula, Chr(40))(0)), "bar") > 0)
End Function
Esta função existe para testar a presença de uma certa substring (barra, neste caso) antes de (.
O caso em que estou tendo problemas é quando a célula passada para a função está vazia, a thisCell.hasFormula é falsa, mas a instrução após e ainda está sendo avaliada. Isso me dá um erro fora do intervalo subscrito em tempo de execuçã
O VBA continua realmente avaliando o segundo argumento para o E, mesmo quando o primeiro era fals