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が長さゼロの文字列の場合、コントロールをNullに設定します.Value

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 に答える