确定是否选中了Access复选框

时间:2010-09-28 14:25:26

标签: ms-access ms-access-2007

这么简单的问题,但我找不到答案(Google,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

第二次更新:

代码应为此(感谢@ 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

2 个答案:

答案 0 :(得分:20)

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

在Access中,有两种类型:

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

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

  3. 小答案:答案:

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

      ?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,除非您实际想要操作控件。在这种情况下,您的参数的数据类型应该是Access控件而不是布尔值。任何其他东西都有隐含引用的风险。

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

答案 1 :(得分:4)

检查yourCheckBox.Value