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中,有两种类型:
2状态 - 可以选中或取消选中,但不能为空.值为True(已选中)或False(未选中).在Access和VBA中,True的值为-1,False的值为0.对于使用1表示True的环境的可移植性,您始终可以测试False或Not False,因为False是所有环境的值0了解.
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设计,因为用户无法看到控件中实际存储了什么值,这违背了选择它来编辑你的数据.