개체가 설정되어 있는지 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.