我想遍历表单上的所有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 :(得分:11)
该代码循环遍历表单的Controls
集合中的每个控件。该集合包括控件,例如标签和命令按钮,它们既不绑定也不绑定...因此,尝试引用其.ControlSource
会生成该错误。
对于诸如未绑定文本框之类的控件,其.ControlSource
属性为空字符串,而不是Null。
因此,当您遍历控件时,请仅检查.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