0

TextBox1、CommandButton1、2とともに、CheckBox1 ... 19とOptionButton1 ... 3を含むUserForm4があります。

OptionButton 1 = True の場合、すべての CheckBoxes をループして、それぞれを True に設定します。

「オブジェクトが見つかりません」というエラーが表示され、i = 21、n = 23 です。CheckBox が 19 個しかないのに、どうしてそんなに高くなるのでしょうか?

ありがとう!

Private Sub OptionButton1_Click()

Dim ctrl As Control
Dim i As Integer
Dim n As Integer

n = 0

For Each ctrl In UserForm4.Controls
    If TypeOf ctrl Is MSForms.CheckBox Then
        n = n + 1
    End If
Next ctrl

For i = 1 To n
    If UserForm4.Controls("CheckBox" & i) = False Then
        UserForm4.Controls("CheckBox" & i) = True
    End If
Next i

End Sub
4

1 に答える 1

1

最初に 19 個以上作成し、一部を削除しましたか? 各 VBA オブジェクトには一意の名前があります。このままでは、あらゆる種類の問題が発生する可能性があります。

たとえば、10 個の CheckBox を作成し、そのうちの 8 個を削除した場合、残りの 2 個の名前は Checkbox8 と Checkbox9 になります。したがって、ループはそれらにまったくヒットしません。

また、次のようなことをしてみませんか。

Private Sub OptionButton1_Click()

Dim ctrl As Control
Dim i As Integer
Dim n As Integer

n = 0

For Each ctrl In UserForm4.Controls
    'this will make your problem really obvious
    debug.print ctrl.name
    If TypeOf ctrl Is MSForms.CheckBox Then
        ctrl.value = True
    End If
Next ctrl


End Sub
于 2013-09-23T20:09:54.193 に答える