如何获取Access 2010报告上的复选框?

时间:2015-09-18 19:30:44

标签: vba ms-access checkbox ms-access-2010

我正在通过MS Access 2010开发数据库应用程序。 我为报告添加了一个未绑定的二进制复选框,目的是用户可以选择两个记录源(查询)中的一个,用于报告的两种变体形式。 复选框Control Source属性为空,Triple State设置为No

但是,在打开报告后, 复选框永久变灰,无论多少次被点击! 此外,在每个点击复选框时,my_checkbox_Click()会触发两次,其值在NullTrue之间切换! Null值似乎被解释为False,如果事件没有在每次单击时双击,则可能没问题。

如何正确显示 的复选框 - 作为二进制复选框,在是和否之间切换 - 和功能正确地说,每次点击只会一次 {<1}}? 如果这是一个没有解决方案的已知问题,这是一种解决方法的最佳按钮类型?

我的代码:

_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 更改之后的Requery确实正确(如果非常简短)会影响数据。

另一件事,即使我的复选框在RecordSource下没有列出AfterUpdate,如果我用

替换上面的Events处理程序
my_checkbox_Click()

我得到了

Private Sub my_chk_AfterUpdate()
    Debug.Print vbCrLf & "my_chk_AfterUpdate"
    set_data_source
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_AfterUpdate 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_AfterUpdate set_data_source Me.my_chk.Value -1 Me.my_chk.ControlSource Me.my_chk.TripleState False Me.RecordSource my_yes_qry 每次点击触发一次,但复选框值也不会改变!

access-programmers.co.uk/forums结束 有一个建议(关于表格,而不是报告)使用花式编码

AfterUpdate

我试过,但结果没有差异。

1 个答案:

答案 0 :(得分:1)

您确定可以在表单中检查报告上的复选框吗?我不是!但是可以找到一个有趣的可能性here

对于表单,它会变灰,因为它未绑定且值未设置。解决方案是创建一个表单变量并设置为该变量。加载表单时,将变量设置为False并将复选框设置为变量。在复选框的AfterUpdate()事件中,使用控件的值来设置变量。然后运行set_data_source。您可能还希望在加载表单时运行set_data_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