在表单中的任何文本框更改时运行函数? MS Access

时间:2014-08-07 14:31:50

标签: forms vba ms-access

当任何控件元素中的数据发生变化时,有没有办法在VBA中运行函数?我已经尝试过Form_AfterUpdate和Form_DataChange,但他们似乎没有做任何事情

2 个答案:

答案 0 :(得分:2)

您无需对控件的更新/更改事件进行编码,请查看Key Preview

  

您可以使用KeyPreview属性指定表单级别   在控制键盘之前调用键盘事件过程   事件程序。读/写布尔。

小心使用。

例如,使用KeyPreview:

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

key preview

答案 1 :(得分:0)

第1步:创建一个功能

Function DoStuff()
    Call RunMySub
End Function

步骤2:创建宏(命名为RunMyCode)

RunCode
  Function Name DoStuff()

步骤3:修改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 enclosure,因为我将这些代码包装在多个不同类型的控件周围,而不是所有控件都包含所有方法。