循环遍历表单上所有未绑定的控件并清除数据
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 - 清除表单的控件,绕过计算的控件