2010-09-28 135 views
16

这样一个简单的问题,但我无法找到答案(谷歌,微软的帮助下,SO):确定一个访问复选框是否被选中或不

如何我可以检查由VBA是否未绑定的复选框的访问形式是否由用户检查?找不到合适的属性。

在此先感谢!

UPDATE:

我用这个代码@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 

月2日更新:

的代码应该是这样的(感谢@大卫-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 

回答

19

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

在Access中,有两种类型:

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

  2. 3态 - 类似于2态,但可以为空。点击它循环访问True/False/Null。这是为了绑定到允许空值的整数字段。对于一个布尔型的字段是没有用的,它永远不会是空的。

小问题与解答:

有几乎从来没有需要使用访问控制的.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(因为它不是False )。虽然您可能会在HTML表单中使用这种类型的东西,但它并不适用于Access应用程序的UI设计,因为用户无法查看控件中实际存储了什么值,这无法实现选择它来编辑你的数据。

+0

非常感谢! (再次) – waanders 2010-09-29 07:12:16

4

检查yourCheckBox.Value

+0

谢谢。我预计(在微软的方式)一个名为“检查”或什么的属性。但没有值(或0)=未检查,值意味着'检查'。对? – waanders 2010-09-28 14:56:04

+0

据我记忆,'.Value = True'如果选中 – 2010-09-28 14:59:40

相关问题