当表单中的任何文本框发生更改时运行函数?微软访问

Posted

技术标签:

【中文标题】当表单中的任何文本框发生更改时运行函数?微软访问【英文标题】:Run a function when any textbox changes in a form? MS Access 【发布时间】:2014-08-07 14:31:50 【问题描述】:

有没有办法在任何控制元素中的数据发生变化时在 VBA 中运行函数?我试过 Form_AfterUpdate 和 Form_DataChange 但他们似乎什么也没做

【问题讨论】:

这将是一个棘手的问题,因为您必须对窗体中控件的所有 After Update/Change 事件进行编码。或者您可以检查 On Click 事件并检查它是否来自控件。或 On Key Press 事件相同的逻辑。这仍然是一个漫长而复杂的过程。 啊,我希望我不必诉诸于此。谢谢 我赞同@PaulFrancis 所说的。话虽如此,如果您对需要做的事情有更多了解,那么另一种方式可能是可行的。 是一些基本的if语句和基于不同文本框的计算,简单的文本框值变化。 而这些需要在运行中?我希望您更新您的问题并准确解释您需要做什么。这将对所有相关人员有所帮助。 【参考方案1】:

您不必在控件的更新/更改事件后编写代码,请查看Key Preview

可以使用 KeyPreview 属性来指定表单级是否 在控件的键盘之前调用键盘事件过程 事件程序。读/写布尔值。

小心使用。

例如,开启 KeyPreview:

 Private Sub Form_KeyPress(KeyAscii As Integer)
      MsgBox "You pressed a key"
 End Sub

【讨论】:

我不会将其归类为答案,正如我已经在 cmets 中提到的那样,这将是一个很长的过程来找出源头,而且 KeyPreview 事件可能会更加棘手,如果您不知道如何正确使用它们。因此,正确的解决方案是查看 OP 实际需要什么,并提出一个安全且可能是 OverMind 提到的更好的替代方案! 我从来不知道它的存在,哈哈。 +1 @PaulFrancis 总是有Screen.ActiveControl @Fionnuala - 这并不总是可靠的。这当然是 IMVHO。我不建议使用 Screen.ActiveControl(尽管前面的评论中也暗示了这一点)。 johnny93,欢迎您使用答案,但请注意如何使用它。祝你好运。 @Overmind 这个问题很模糊,我给出了一个有点模糊的答案,提到了一个不是每个人都知道的属性,它不是一个规范的答案,也永远不可能。正如您所提到的,当信息短缺时,我打算指出该属性,而不是提供代码。【参考方案2】:

第 1 步:创建函数

Function DoStuff()
    Call RunMySub
End Function

第 2 步:创建宏(名为 RunMyCode)

RunCode
  Function Name DoStuff()

第三步:修改 Form_Load() 子

Private Sub Form_Load()
Dim cControl As Control
On Error Resume Next
    For Each cControl In Me.Controls
        if cControl.ControlType = 109 'this is for text boxes
            'Depending on what your code does you can use all or some of these:
            cControl.OnExit = "RunMyCode"
            cControl.OnEnter = "RunMyCode"
            cControl.OnLostFocus = "RunMyCode"
            cControl.OnGotFocus = "RunMyCode"
            If cControl.OnClick = "" Then cControl.OnClick = "RunMyCode"
        end if
    Next cControl
On Error GoTo 0

您可以使用控件中的任何属性,我发现“OnExit/OnEnter”和“OnLostFocus/OnGotFocus”对是最有效的。我也喜欢“OnClick”,但我使用 if 语句来不覆盖操作(用于按钮和东西)。您可以将控制操作分配给其他十几种方法——我相信您将能够找到一种/几种满足您的目标的方法。

注意 -- 我使用 on error 附件是因为我将此代码包装在多种不同类型的控件周围,并且并非所有控件都具有所有方法。

【讨论】:

由于似乎没有表单级别的事件来实现目标,因此 Schalton 的代码可能会显示出一种相当有效且相当稳定的解决方法 - 我认为,这个答案应该反对@987654324 @解决方案。

以上是关于当表单中的任何文本框发生更改时运行函数?微软访问的主要内容,如果未能解决你的问题,请参考以下文章

如何更新用户表单中的条目?

通过表单事件过程中的函数填充访问文本框

在运行其他代码时打开和更新文本框*上的显示访问表单*

当表单中没有任何更改时显示警报框

访问前台 MySql 后台运行时错误 7878

下次运行应用程序时保存文本框值