2012-11-16 34 views
1

我正在使用Collection來存儲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()似乎返回一般或特定類型,但我不明白它如何做出該選擇。

但是,您可能會發現TypeOf對確定frm是否爲子窗體很有用。

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