访问vba单击按钮刷新表单但触发点击事件不刷新表单

时间:2017-10-22 07:10:14

标签: vba forms ms-access refresh

我有2个按钮来过滤/取消过滤子窗体。事件代码(私有)正在调用公共函数:

我可以点击按钮来过滤/取消过滤,效果很好。

Option Compare Database
Option Explicit

Dim PartCalendarSubHeaderFilterOn As Boolean

Private Sub imgClearFilter_Click()
    PartCalendarSubHeaderFilterOn = False
    UpdatePartCalendarSubHeaderFilter
End Sub

Private Sub imgFavoriteFilter_Click()
    PartCalendarSubHeaderFilterOn = True
    UpdatePartCalendarSubHeaderFilter
End Sub

Public Sub UpdatePartCalendarSubHeaderFilter()
    If PartCalendarSubHeaderFilterOn Then
        PartCalendarSubHeaderFilter
    Else
        PartCalendarSubHeaderClearFilter
    End If
    Me.Requery
End Sub

Private Sub PartCalendarSubHeaderClearFilter()
    Dim sql As String
    sql = "... "
    Me!frmPartCalendarSubHeaders.Form.RecordSource = sql
End Sub

Private Sub PartCalendarSubHeaderFilter()
    Dim sql As String
    sql = "... "
    Me!frmPartCalendarSubHeaders.Form.RecordSource = sql
End Sub

从另一种形式的当前事件,我想通过调用public方法调用update filter sub来刷新部分日历:

Private Sub Form_Current()
    ...
    'update part calendar
    Form_frmPartCalendarSub.UpdatePartCalendarSubHeaderFilter
    Me.Parent!frmPartCalendarSub.Requery
End Sub

当我在调试模式下逐行操作时,我可以看到它与我点击过滤器/未过滤器按钮完全相同的代码,通过行

Me!frmPartCalendarSubHeaders.Form.RecordSource = sql

Me.Requery

但子窗体没有按预期刷新。

有趣的事情:在调试模式下,如果我在输入代码行后重置一次

Public Sub UpdatePartCalendarSubHeaderFilter()

然后它可以正常工作:我可以使用按钮进行过滤,当我选择另一个记录时,它会根据所选的过滤器正确刷新。

你有没有遇到过这个问题之王?我应该纠正什么才能使代码从头开始工作,而不必从调试模式中断?

1 个答案:

答案 0 :(得分:0)

尝试替换

Form_frmPartCalendarSub.UpdatePartCalendarSubHeaderFilter

通过

Forms("frmPartCalendarSub").UpdatePartCalendarSubHeaderFilter

第一个命令不保证代码以正确的形式执行。最好避免使用Form类方法的直接调用,这可能会导致意想不到的结果。