【问题标题】: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)...

标签: ms-access vba ms-access-2010


【解决方案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)。
  • 是的,我说的是同一件事。但是,当我尝试这样做时,我仍然可以在子表单的文本框中输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多