2013-09-20 4 views
2

내가 여기에서하려는 것은 현재 활성 창에 대한 참조를 저장하는 것이지만 작동하지 않는 것 같습니다. 마지막 줄에서 런타임 오류가 발생합니다.VBA : 런타임 오류 '91'?

Dim SourceWindow As Window, QACheckWindow As Window 
SourceWindow = ActiveWindow 

이유가 확실하지 않습니다. ActiveWindow은 현재 활성 창을 반환 할 예정입니까? 그렇지 않다면 어떻게 참조 할 수 있습니까?

편집 : 위는 그것을 할당 할 Set 키워드를 필요로 VB 객체 변수에 Sub FuncName()

+3

Set SourceWindow = ActiveWindow가 아니어야합니까? –

+0

아하! 예, 나는 VB에서 사용하는 것처럼 보이지 않습니다. 감사. – supercheetah

+0

가능한 복제본 [VBA 런타임 오류 91] (http://stackoverflow.com/questions/9160483/vba-run-time-error-91) –

답변

7

전에 그렇게 모두가, 바로 내 함수의 시작 부분입니다. 개체 인 개체 속성도 Set이어야합니다. 할당에서 해당 키워드를 사용하지 않으면 런타임 오류 91 "개체 변수가 설정되지 않았습니다"가 발생합니다.

참조를 할당 Set 키워드를 할당하는 기존 Let 키워드에서 상속됩니다; Let은 궁극적으로 더 이상 사용되지 않지만 (심지어 속성 정의에 필요함) Set이 남아 있으므로 [Let] variable = value과 같은 VB6/VBA 값 할당 구문이 그대로 유지됩니다. 여기서 "Let"는 선택 사항입니다. 선언과 과제

- 따라서 오류

Dim SourceWindow As Window, QACheckWindow As Window 
'this is like saying "Let SourceWindow = ActiveWindow": 
SourceWindow = ActiveWindow 

SourceWindow 그것이 것처럼 할당 개체이다.

이 오류는 설정되지 않은 개체에 액세스 할 때 발생할 수 있습니다. 그물에 상당는 일 것 NullReferenceException :

Dim SourceWindow As Window, Dim WindowTitle As String 
'"SourceWindow" reference isn't set, the object can't be accessed yet: 
WindowTitle = SourceWindow.Caption 

에 (I 배 밖으로 여기에 조금 갈거야,하지만 기존 LetLet와 혼동해서는 안 VB.net)에서 LINQ 쿼리 구문 (VB.net)에서 값을 계산하고이를 새 쿼리 범위 변수 (예 : MSDN에서 가져옴)에 할당합니다.

.NET이 구분이 모든 것이 궁극적으로 System.Object에서 파생하는 방법을 제공, 훨씬 얇은 라인 때문에

VB.net은 Let 또는 Set를 지정하지 않아도, 모두 참조를 할당 ... System.ValueType을 포함합니다. 그 이유는 the Set keyword was also deprecated in VB.net이고, 또한 속성을 정의하기위한 VB.net 구문이 Let을 사용하여 Set으로 떨어지는 이유는 무엇입니까?

+1

+1 큰 설명! –

+0

감사합니다. 다른 언어들에서 나온'Set'는 좀 지나치게 장황 해 보인다. – supercheetah