2013-03-11 42 views
2

我想循環顯示窗體上的所有UNBOUND控件,並清除其數據或重置其值。我有文本框,組合框和複選框。每次我嘗試這樣的事:循環顯示窗體上的所有未綁定控件並清除數據

Dim ctl As Control 
    For Each ctl In Me.Controls 
     If IsNull(ctl.ControlSource) Then 
      ctl.Value = Nothing 
     End If 
    Next ctl 

我得到一個運行時錯誤說:

438這個對象不支持此屬性或方法。

+0

嘗試'ctl.ControlSource = 「」',而不是'如果ISNULL(ctl.ControlSource)'... – 2013-03-11 21:14:13

+0

完全相同的錯誤... – prayingmantes 2013-03-11 21:17:55

回答

11

該代碼通過循環形式的Controls集合中的每個控制。該集合包括控件,如標籤和命令按鈕,它們既不是綁定也不是非綁定的......所以試圖引用它們的.ControlSource會產生該錯誤。

對於諸如未綁定文本框的控件,其.ControlSource屬性是空字符串,而不是空值。

因此,當您循環控制時,請檢查.ControlSource僅適用於您希望定位的控件類型。在下面的例子中,我選擇了文本和組合框。當.ControlSource是零長度字符串時,請將控件的.Value設置爲Null。

For Each ctl In Me.Controls 
    Select Case ctl.ControlType 
    Case acTextBox, acComboBox ' adjust to taste 
     'Debug.Print ctl.Name, Len(ctl.ControlSource) 
     If Len(ctl.ControlSource) = 0 Then 
      ctl.value = Null 
     End If 
    Case Else 
     ' pass 
    End Select 
Next 
+0

漢斯你真棒。謝謝!! – prayingmantes 2013-03-12 13:38:42

+1

這也可以鎖定子窗體嗎?案例acTextBox,acSubform – user1175126 2013-04-24 06:09:16

+0

您可以以類似的方式遍歷子窗體的Controls集合。如果設置了子窗體的Locked屬性,則代碼仍然可以檢查其Controls集合。這是你的意思嗎? – HansUp 2013-04-24 06:15:02

相關問題