Loop through all unbound controls on a form and clear data

隐身守侯 提交于 2019-12-19 09:39:38

问题


I would like to loop through all UNBOUND controls on my form and clear their data or reset their values. I have textboxes, comboboxes and checkboxes. Every time I try something like this:

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

I get a runtime error saying:

438 This object doesn't support this property or method.


回答1:


That code loops through every control in the form's Controls collection. The collection includes controls, such as labels and command buttons, which are neither bound nor unbound ... so attempting to reference their .ControlSource generates that error.

For a control such as an unbound text box, its .ControlSource property is an empty string, not Null.

So as you loop through the controls, inspect the .ControlSource for only those control types you wish to target. In the following example I chose text and combo boxes. When the .ControlSource is a zero-length string, set the control's .Value to 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


来源:https://stackoverflow.com/questions/15348730/loop-through-all-unbound-controls-on-a-form-and-clear-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!