私はVBAを初めて使用します(そして、Excel内でのみ知っています)。
いくつかの(すべてではない)チェックボックスを循環しようとしています。現在、CheckBox1 から CheckBox15 までの名前が付けられています。たとえば、CheckBox5からCheckBox10までを循環させるにはどうすればよいですか?
名前を確認できるコントロールの「CheckType」に似た「メソッド」があることを望んでいると思いますか?
これが私が試したことです。コンパイル エラーが発生します - Sub または Function が定義されておらず、ワークシートが強調表示されます。
Private Sub BoxCheck()
atLeastOneChecked = False
For i = 2 To 4
If Worksheets("ActiveX").Controls("Checkbox" & i).Value = True Then
atLeastOneChecked = True
End If
Next i
End Sub
上記は機能しませんが、以下は機能します。
Private Sub BoxCheck()
atLeastOneChecked = False
For i = 1 To 2
If Sheet2.CheckBox2.Value = True Then
atLeastOneChecked = True
End If
Next i
End Sub
もちろん、ループは結果に影響しませんが、コンパイルされ、Checkbox2 が True の場合、atLeastOneChecked が False から True に変わります。Sheet2 の名前が ActiveX になっていることに注意してください。ワークシートとコントロールがどのように機能するかがはっきりとわかりません。誰か助けてくれませんか?
以下で説明するエラーを修正した後でも、これは機能しません。私は次のように簡略化しました:
Private Sub BoxCheck()
Dim ole As OLEObject
atLeastOneChecked = False
Set ole = Sheets("ActiveX").OLEObjects("Checkbox2")
If ole.Value = True Then
atLeastOneChecked = True
End If
End Sub
これはうまくいきません。次の時点で失敗します。
If ole.Value = True Then
エラー状態: オブジェクトはこのプロパティまたはメソッドをサポートしていません
これは OLEObject には当てはまりますが、チェックボックスには当てはまりません。ole のプロパティを見ると、その Object プロパティが Object/Checkbox に設定されており、この Object に値があることがわかります。それがifステートメントで参照する必要があると思いますが、方法がわかりません。