【问题标题】:Why is BeforeUpdate event firing when I change a control in VBA?当我在 VBA 中更改控件时,为什么会触发 BeforeUpdate 事件?
【发布时间】:2019-04-22 06:12:52
【问题描述】:

我有一个访问表单,该表单通过单击另一个表单的按钮打开。我有一个 Form_Current 事件,它通过 VBA 更新该表单上的几个控件。出于某种原因,这会导致在 Form_Current 完成后触发 BeforeUpdate 事件,即使 MS 帮助文档说在 VBA 中更改控件不会触发此事件。我已经设法隔离了至少一条将触发此事件的行:

txtEventID = gblEventID

其中 txtEvent ID 是控件的名称,而 gblEventID 是模块级变量。我无法弄清楚为什么会这样。有什么想法吗?

如果你想看看整个子:

Private Sub Form_Current()

    If (Me.NewRecord = True) Then
        Dim lookupNum As Integer

        txtEventID = gblEventID
        lookupNum = DLookup("Max(Subplot_Num)", "tbl_Subplots", "Event_ID = " & txtEventID.Value) + 1

        If (IsNull(lookupNum)) Then
            txtSubplotNum = "1"
        Else
            txtSubplotNum = lookupNum
        End If

    End If

    If xboPoaching.Value = False Then txtPoachingNotes.Enabled = False

End Sub

【问题讨论】:

  • 触发了哪个控件的 Before_Update 事件?如果有的话,该控件的记录源或控件源是什么?我以前在访问中看到过这样的奇怪东西 - 我希望我能帮助你。我知道这有多令人沮丧
  • 这是整个表单的 Before_Update 事件。因此 Form_Current 将控件的值设置为整数,并且在该子程序完成运行后,将立即运行 Before_Update 子程序。我知道 Form_Current 中的那一行是罪魁祸首,因为我已经将其他所有内容都注释掉了,但仍然触发了 Before_Update。设置值的控件的控件源绑定到表中的整数字段。
  • 既然你已经问过了,我想知道更新前的 MS 帮助文档是否意味着如果在 VBA 中更改,控件的 Before_Update 事件不会触发,但是用于整个表单的那个会。但这引出了另一个问题:如何运行仅在用户移动到新记录之前触发的代码,而不是在他们更新控件之后触发?
  • 试试这个 - 在 VBA 中更明确地设置表单控件的值。所以,不要尝试txtEventID = gblEventID,而是尝试txtEventID.Value = gblEventID。与txtSubplotNum 等其他控件相同。
  • 刚刚尝试过 - 没有变化。但是我采用了下面Gustav的代码,现在BeforeUpdate只在表单首次加载时触发,而不是在任何后续新记录时触发。奇怪……还在调查这个。

标签: database ms-access vba


【解决方案1】:

您可以修改/减少该代码:

Private Sub Form_Current()

    Dim lookupNum As Integer

    If Me.NewRecord = True Then    
        lookupNum = Nz(DMax("Subplot_Num", "tbl_Subplots", "Event_ID = " & gblEventID & ""), 0) + 1
        txtSubplotNum = lookupNum
    End If

    If xboPoaching.Value = False Then 
        txtPoachingNotes.Enabled = False
    End If

End Sub

【讨论】:

  • 欣赏小费 :)
【解决方案2】:

据我所知,如果您以编程方式更改控件中的值,则该控件的 Before_Update 事件将不会触发,但包含该控件的表单的 Before_Update 事件将触发。 MS 文档对此很模糊,但在我的测试中似乎是一致的。

【讨论】:

    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多