Eu tenho uma variável global que é uma instância da minha classe personalizada.
Como verifico se o objeto está definido ou se preciso inicializá-lo?
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
Ou, se você preferir o contrário:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
obj Is Nothing
NÃO é o mesmo que verificarIsNothing(obj)
! Obrigado pela sintaxe correta para verificar isso ... não tenho certeza por queIsNothing()
se comporta de maneira diferente ...Not (obj Is Nothing)
mais fácil de entender do queNot obj Is Nothing
. Meu cérebro não sabe o que é um "Não obj"!A maneira (des) segura de fazer isso - se você concordar em não usar a opção explícita - é ...
Not TypeName(myObj) = "Empty"
Isso também trata do caso se o objeto não foi declarado. Isso é útil se você quiser apenas comentar uma declaração para desligar algum comportamento ...
Dim myObj as Object Not TypeName(myObj) = "Empty" '/ true, the object exists - TypeName is Object 'Dim myObj as Object Not TypeName(myObj) = "Empty" '/ false, the object has not been declared
Isso funciona porque o VBA irá instanciar automaticamente uma variável não declarada como um tipo de Variante Vazia. Ele elimina a necessidade de um Booleano auxiliar para gerenciar o comportamento.
fonte
Option Explicit
. Não ganha nada, exceto problemas. Para "mudar" o comportamento, use a Compilação Condicional.