2012-11-16 3 views
1

컬렉션을 사용하여 SubForm 유형의 변수를 저장하고 있지만 개체를 ​​검색하기 위해 이동하면 유형은 Controls입니다. 누군가 왜 이것이라고 말할 수 있습니까?컬렉션은 Access & VBA를 사용하여 변수 유형을 변경합니다.

For Each ctl In Me.controls 
     Select Case ctl.ControlType 
      Case acSubform 
       Debug.Print "subform: " & TypeName(ctl) 
       If (ctl.Name = "a" Or ctl.Name = "b") Then 
        frmCollection.Add (ctl) 
       End If 
     End Select 
Next 

For Each frm In frmCollection 
    Debug.Print "Control: " & TypeName(frm) 
Next 

답변

3

하위 폼은 컨트롤 유형입니다. 상황에 따라 TypeName()은 일반 유형 또는 특정 유형을 반환하는 것으로 보이지만 그 선택이 어떻게되는지 이해하지 못합니다.

그러나 frm이 하위 폼인지 여부를 확인하는 데 유용한 TypeOf이 유용 할 수 있습니다.

For Each frm In frmCollection 
    If TypeOf frm Is SubForm Then 
     Debug.Print "Control is a subform" 
    Else 
     Debug.Print "Control is not a subform" 
    End If 
Next 
+0

감사합니다. 또 다른 문제점은 컬렉션에서 벗어난 객체가 올바른 속성을 잃어버린 것입니다. frm.Name이 더 이상 인식되지 않습니다. VBA에서 캐스트를 만들 수 없다는 것이 내 이해입니다. – Nate

+0

제 테스트에서'frm'이'.Name' 속성을 잃어 버리는 것을보고 있지 않습니다. 그래서'frm'을 어떻게 선언하는지 궁금합니다 : Control; 목적; 다른; 다른 것? – HansUp

+0

VBA에서는 캐스트를 만들 수 없습니다. 나는 그 점을 완전히 잃어 버렸다. – HansUp

관련 문제