このような簡単な質問ですが、答えが見つかりません(Google、MSヘルプ、SO):
Accessフォームの非バインドチェックボックスがユーザーによってチェックされているかどうかをVBAで確認するにはどうすればよいですか?適切なプロパティが見つかりません。
前もって感謝します!
更新:
@HansUpと@RCの提案の後、このコードを使用しました。
Private Sub CmdTest_Click()
MsgBox "Check1.Value = " & Me.Check1.Value
MsgBox "Check2.Value = " & Me.Check2.Value
End Sub
Private Sub Form_Load()
Me.Check1.Value = 25
Me.Check2.Value = 50
End Sub
2回目の更新:
コードは次のようになります(@ David-W-Fentonに感謝):
Private Sub CmdTest_Click()
If Me.Check1 = True Then
MsgBox "Check1 IS CHECKED"
Else
MsgBox "Check1 IS NOT CHECKED"
End If
If Me.Check2 = True Then
MsgBox "Check2 IS CHECKED"
Else
MsgBox "Check2 IS NOT CHECKED"
End If
End Sub
Private Sub Form_Load()
' set first checkbox default checked
Me.Check1.Value = True
' set second checkbox default unchecked
Me.Check2.Value = False
End Sub
チェックボックスは、ブール値の有効な入力を保証するという目的のために設計されたコントロールタイプです。
Accessには、2つのタイプがあります。
2状態-チェックまたはチェック解除できますが、Nullはできません。値はTrue(チェックされている)またはFalse(チェックされていない)です。 AccessおよびVBAでは、Trueの値は-1、Falseの値は0です。Trueに1を使用する環境での移植性のために、Falseはすべての環境で値0であるため、常にFalseまたはNot Falseをテストできます。知ってる。
3-state-2-stateに似ていますが、Nullにすることができます。クリックすると、True/False/Nullが循環します。これは、NULLを許可する整数フィールドにバインドするためのものです。 Nullになることはないため、ブール型フィールドでは使用できません。
答えとマイナーなbり:
Accessコントロールの.Valueプロパティはデフォルトのプロパティなので、使用する必要はほとんどありません。これら2つは同等です。
?Me!MyCheckBox.Value
?Me!MyCheckBox
ここでの唯一の落とし穴は、チェックボックスの値をテストするときに暗黙的な参照を作成しないように注意することが重要であることです。これの代わりに:
If Me!MyCheckBox Then
...次のオプションのいずれかを記述します。
If (Me!MyCheckBox) Then ' forces evaluation of the control
If Me!MyCheckBox = True Then
If (Me!MyCheckBox = True) Then
If (Me!MyCheckBox = Not False) Then
同様に、ブールコントロールから値を取得するサブルーチンまたは関数を作成する場合、実際にコントロールを操作する場合を除き、常にブールパラメータをByValとして宣言します。その場合、パラメーターのデータ型はブール値ではなくアクセス制御である必要があります。それ以外のものは、暗黙的な参照のリスクを負います。
最後に、コードでチェックボックスの値を設定すると、0と-1だけでなく、実際には任意の数値に設定できますが、0以外の数値はTrueとして扱われます(Falseではないため)。 HTMLフォームでそのようなものを使用することはできますが、ユーザーがコントロールに実際に格納されている値を確認する方法がないため、Accessアプリの適切なUIデザインではありません。データの編集用に選択します。
yourCheckBox.Value
?