3

我想遍历表单上的所有 UNBOUND 控件并清除它们的数据或重置它们的值。我有文本框、组合框和复选框。每次我尝试这样的事情:

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

我收到运行时错误消息:

438 此对象不支持此属性或方法。

4

1 回答 1

12

该代码循环遍历表单集合中的每个控件。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
于 2013-03-11T22:13:38.113 回答