确定是否选中了Access复选框

waa*_*ers 21 ms-access ms-access-2007

这么简单的问题,但我找不到答案(谷歌,MS帮助,SO):

如何通过VBA检查用户是否检查了Access表单上的未绑定复选框?找不到合适的房产.

提前致谢!

更新:

我在@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
Run Code Online (Sandbox Code Playgroud)

第二次更新:

代码应该是这样的(感谢@ 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
Run Code Online (Sandbox Code Playgroud)

Dav*_*ton 23

复选框是为一个目的而设计的控件类型:确保有效输入布尔值.

在Access中,有两种类型:

  1. 2状态 - 可以选中或取消选中,但不能为空.值为True(已选中)或False(未选中).在Access和VBA中,True的值为-1,False的值为0.对于使用1表示True的环境的可移植性,您始终可以测试False或Not False,因为False是所有环境的值0了解.

  2. 3状态 - 像2状态,但可以是空的.单击它循环显示True/False/Null.这是为了绑定到允许Null的整数字段.布尔字段没有用,因为它永远不会是空的.

轻微狡辩与答案:

几乎从不需要使用Access控件的.Value属性,因为它是默认属性.这两个是等价的:

  ?Me!MyCheckBox.Value
  ?Me!MyCheckBox
Run Code Online (Sandbox Code Playgroud)

这里唯一的问题是,在测试复选框的值时,要小心不要创建隐式引用,这一点很重要.而不是这个:

  If Me!MyCheckBox Then
Run Code Online (Sandbox Code Playgroud)

...写下以下选项之一:

  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
Run Code Online (Sandbox Code Playgroud)

同样,在编写从布尔控件获取值的子例程或函数时,请始终将布尔参数声明为ByVal,除非您实际想要操作控件.在这种情况下,您的参数的数据类型应该是Access控件而不是布尔值.任何其他东西都有隐含引用的风险.

最后,如果在代码中设置复选框的值,您实际上可以将其设置为任何数字,而不仅仅是0和-1,但是除0以外的任何数字都被视为True(因为它不是False).虽然你可能在HTML表单中使用这种东西,但是对于Access应用程序来说,它不是正确的UI设计,因为用户无法看到控件中实际存储了什么值,这违背了选择它来编辑你的数据.