【问题标题】:Determine whether a Access checkbox is checked or not确定是否选中了访问复选框
【发布时间】:2011-04-18 08:16:24
【问题描述】:

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

【问题讨论】:

    标签: ms-access ms-access-2007


    【解决方案1】:

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

    在 Access 中,有两种类型:

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

    2. 3-state -- 与 2-state 类似,但可以为 Null。单击它会在 True/False/Null 之间循环。这是为了绑定到允许 Null 的整数字段。它对布尔字段没有用,因为它永远不会是 Null。

    对答案的小问题:

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

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

    【讨论】:

    【解决方案2】:

    查看yourCheckBox.Value

    【讨论】:

    • 谢谢。我期望(以微软的方式)一个名为“Checked”或其他东西的属性。但是没有值(或 0)= 未检查,值表示“已检查”。对吗?
    • 据我所知,.Value = True 如果选中
    猜你喜欢
    • 2011-06-12
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多