개체가 설정되어 있는지 VBA 확인


89

내 사용자 지정 클래스의 인스턴스 인 전역 변수가 있습니다.

객체가 설정되었는지 또는 초기화해야하는지 어떻게 확인합니까?

답변:


135
If obj Is Nothing Then
    ' need to initialize obj: '
    Set obj = ...
Else
    ' obj already set / initialized. '
End If

또는 다른 방법을 선호하는 경우 :

If Not obj Is Nothing Then
    ' obj already set / initialized. '
Else
    ' need to initialize obj: '
    Set obj = ...
End If

2
Google을 검색했을 때 간단해야한다는 것을 알았지 만 아무것도 찾지 못했습니다! 당신의 도움을 주셔서 감사합니다!
Icode4food 2010

3
확인 obj Is Nothing은 확인 과 동일하지 않습니다 IsNothing(obj)! 올바른 구문에 대한 감사는 확실하지 왜 ...이 확인 IsNothing()... 다르게 작동
맷 브라운에게

1
나는 Not (obj Is Nothing)보다 이해하기 쉽다 Not obj Is Nothing. 내 두뇌는 "Not obj"가 무엇인지 모릅니다!
Martin F

당신은 또한 쓸 수 있습니다 : If obj IsNot Nothing 나는 나머지보다 훨씬 더 명확합니다. 또한 C # (ojb! = null)과 같은 느낌
Alexandre

4

이를 수행하는 (불) 안전한 방법-명시 적 옵션을 사용하지 않는 것이 괜찮다면 ...

Not TypeName(myObj) = "Empty"

이것은 또한 객체가 선언되지 않은 경우를 처리합니다. 이것은 일부 동작을 끄는 선언을 주석 처리하려는 경우 유용합니다.

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

이것은 VBA가 선언되지 않은 변수를 Empty Variant 유형으로 자동 인스턴스화하기 때문에 작동합니다. 동작을 관리하기 위해 보조 부울이 필요하지 않습니다.


4
누구도 .NET Framework없이 VBA 코드를 가질 수 없습니다 Option Explicit. 문제 외에는 아무것도 얻지 못합니다. 동작을 "전환"하려면 조건부 컴파일을 사용하십시오.
Andre

@andre, 예, 공정한 지적입니다. 범위에 헝가리 표기법을 사용하기 때문에 그것 없이는 괜찮다고 느끼지만, 요즘에는 가능하다면 vba를 피하려고합니다. 내가 보는 대부분의 내용은 명시 적 선언, 이름 안전성 및 두려운 변형을 피하는 것입니다. 당신의 주요 이유는 무엇입니까?
Cool Blue

사실 나는 유형 이름의 결과로 "아무것도"및 "빈"하지 얻을
패트릭 Lepelletier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.