这么简单的问题,但我找不到答案(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
答案 0 :(得分:20)
复选框是为一个目的而设计的控件类型:确保有效输入布尔值。
在Access中,有两种类型:
2状态 - 可以选中或取消选中,但不能为空。值为True(已选中)或False(未选中)。在Access和VBA中,True的值为-1,False的值为0.对于使用1表示True的环境的可移植性,您始终可以测试False或Not False,因为False是所有环境的值0知道。
3状态 - 就像2状态一样,但可以是Null。单击它循环显示True / False / 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,除非您实际想要操作控件。在这种情况下,您的参数的数据类型应该是Access控件而不是布尔值。任何其他东西都有隐含引用的风险。
最后,如果在代码中设置复选框的值,您实际上可以将其设置为任何数字,而不仅仅是0和-1,但是除0以外的任何数字都被视为True(因为它不是假的) 。虽然你可能在HTML表单中使用这种东西,但是对于Access应用程序来说,它不是正确的UI设计,因为用户无法看到控件中实际存储了什么值,这违背了选择它来编辑你的数据。
答案 1 :(得分:4)
检查yourCheckBox.Value
?