Vba 如何使复选框在Access 2010报告中起作用?
我正在通过MS Access 2010开发一个DB应用程序。 我在报告中添加了一个未绑定的二进制复选框,目的是用户可以为报告的两种变体从两个记录源(查询)中选择一个。 复选框Vba 如何使复选框在Access 2010报告中起作用?,vba,ms-access,checkbox,ms-access-2010,Vba,Ms Access,Checkbox,Ms Access 2010,我正在通过MS Access 2010开发一个DB应用程序。 我在报告中添加了一个未绑定的二进制复选框,目的是用户可以为报告的两种变体从两个记录源(查询)中选择一个。 复选框控制源属性为空,三重状态设置为否 然而,在打开报告时, 无论点击多少次,复选框都会永久变灰! 此外,每次单击复选框时,my\u checkbox\u click()将触发两次,其值在Null和True之间切换! 空值似乎被解释为False,如果事件没有在每次单击时双倍激发,这可能是正常的 如何使我的复选框以二进制复选框的形式
控制源
属性为空,三重状态
设置为否
然而,在打开报告时,
无论点击多少次,复选框都会永久变灰!
此外,每次单击复选框时,my\u checkbox\u click()
将触发两次,其值在Null
和True
之间切换!
空值似乎被解释为False
,如果事件没有在每次单击时双倍激发,这可能是正常的
如何使我的复选框以二进制复选框的形式正确显示,在“是”和“否”之间切换,并正确运行,每次单击仅触发一次\u Click()
?
如果这是一个没有解决方案的已知问题,哪种按钮类型是最佳的解决方法
我的代码:
Private Sub Report_Load()
Debug.Print vbCrLf & "Report_Load"
Me.my_chk.Value = False
set_data_source
End Sub
Private Sub my_chk_Click()
Debug.Print vbCrLf & "my_chk_Click"
set_data_source
End Sub
Private Sub set_data_source()
Debug.Print vbCrLf & "set_data_source"
Debug.Print "Me.my_chk.Value", Me.my_chk.Value
Debug.Print "Me.my_chk.ControlSource ", Me.my_chk.ControlSource
Debug.Print "Me.my_chk.TripleState ", Me.my_chk.TripleState
Me.RecordSource = IIf(Me.my_chk.Value, "my_yes_qry", "my_no_qry")
Me.Requery
Debug.Print "Me.RecordSource", Me.RecordSource
End Sub
即时窗口:
Report_Load
set_data_source
Me.my_chk.Value False
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_no_qry
' click once on checkbox
my_chk_Click
set_data_source
Me.my_chk.Value Null
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_no_qry
my_chk_Click
set_data_source
Me.my_chk.Value -1
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_yes_qry
' click once on checkbox
my_chk_Click
set_data_source
Me.my_chk.Value Null
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_no_qry
my_chk_Click
set_data_source
Me.my_chk.Value -1
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_yes_qry
唯一的好消息是,RecordSource
更改后的Requery
不会正确地(如果过于短暂)影响数据
另一件事,即使我的复选框在事件
下没有列出更新后
,如果我用
Private Sub my_chk_AfterUpdate()
Debug.Print vbCrLf & "my_chk_AfterUpdate"
set_data_source
End Sub
我明白了
正如您所看到的,这也不起作用,因为现在,即使每次单击都触发一次AfterUpdate
,复选框值也不会改变
在
有人建议(关于表单,而不是报告)使用花哨的编码
Nz(Me.my_chk = True, False)
我试过了,但结果没有差别。你确定可以像在表单中一样选中报告上的复选框吗?我不是!但是可以发现一个有趣的可能性 对于窗体,它将灰显,因为它未绑定且未设置值。解决方案是创建一个表单变量并设置为该变量。加载表单时,将变量设置为False,并将复选框设置为变量。在复选框的
AfterUpdate()
事件中,使用控件的值设置变量。然后运行set\u data\u source
。加载表单时,您可能还需要运行set\u data\u source
Option Explicit
Dim booSourceUsual as boolean
Private Sub MyForm_Load()
booSourceUsual = False
Me!my_chk.Value = booSourceUsual
Call set_data_source
End Sub
Private Sub my_chk_AfterUpdate()
booSourceUsual = Me!my_chk.Value
Call set_data_source
End Sub
我的报告的复选框从不变为灰色。我不知道这是否是一个普遍的真理,为什么会这样,或者我是如何知道的。我尝试了你的建议,但它不起作用(对于一份报告)。“…我是如何知道的…”嘿,我从你的帖子中了解到,一份报告可以有点击事件。总是有些东西需要学习,却从来没有足够的方法去了解。典型的方法是从表格中做出决定。除非我在答案顶部引用的帖子引出了什么,否则我认为这就是你必须要做的。即使是这样,我想我还是要用表格!我想你建议使用表单而不是报表,但我之所以使用报表,是因为它具有简单的子功能。如果报表无法处理用户交互,那么我想我将只使用两个表单(用于两个查询)而不是一个表单。
Option Explicit
Dim booSourceUsual as boolean
Private Sub MyForm_Load()
booSourceUsual = False
Me!my_chk.Value = booSourceUsual
Call set_data_source
End Sub
Private Sub my_chk_AfterUpdate()
booSourceUsual = Me!my_chk.Value
Call set_data_source
End Sub