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

questionAnswers(6)

yourAnswerToTheQuestion