循环遍历表单上所有未绑定的控件并清除数据

Posted

技术标签:

【中文标题】循环遍历表单上所有未绑定的控件并清除数据【英文标题】:Loop through all unbound controls on a form and clear data 【发布时间】:2013-03-11 21:12:00 【问题描述】:

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

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

我收到运行时错误提示:

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

【问题讨论】:

试试ctl.ControlSource = "" 而不是If IsNull(ctl.ControlSource)... 【参考方案1】:

该代码循环通过表单的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

【讨论】:

汉斯你真棒。谢谢!! 这也可以用于锁定子表单吗?案例acTextBox,acSubform 您可以以类似的方式循环遍历子表单的 Controls 集合。如果设置了子窗体的 Locked 属性,代码仍然可以检查其 Controls 集合。你是这个意思吗? @user1175126 如果该评论与您 4 周前提出的问题有关,是的,您可以更改上述代码以设置所选控件类型的 .Locked 属性(而不是 .Value)。 是的,我说的是同一件事。但是,当我尝试这样做时,我仍然可以在子表单的文本框中输入。

以上是关于循环遍历表单上所有未绑定的控件并清除数据的主要内容,如果未能解决你的问题,请参考以下文章

Access 2013 vba - 清除表单的控件,绕过计算的控件

html 关闭时清除模态上的表单字段中的数据并清除验证消息

使用 laravel 框架提交数据后清除表单输入

清除 WebBrowser 附加控件内容以在用户窗体中重用它

控件嵌套后清除方法

访问子窗体未绑定控件#Error