如何减少重复的VBA代码

时间:2018-04-19 18:09:18

标签: ms-access access-vba

我的表单中有11个字段的相同AfterUpdate事件。有没有办法将AfterUpdate代码放在函数或模块中,然后在每个AfterUpdate事件中调用函数或模块?

如果在主窗体上更改了某个字段,我会向用户提示一个消息框,说明他们需要在描述更改的子窗体中添加注释。如果用户在消息框上单击“确定”,则会将焦点置于注释子窗体中。如果用户单击“取消”,则会在主窗体中撤消更改。

以下是11个字段重复的代码:

Private Sub ID_AfterUpdate()

On Error GoTo StandardErrorHandling

Dim NoteReq As Integer

NoteReq = MsgBox("A change has been made to a protected field! " & _
"Please provide a note with a brief description of the change." _
, vbOKCancel, "A Note is Required!")

If Form.Dirty = True Then

    If NoteReq = vbCancel Then

        Me.Undo

    ElseIf NoteReq = vbOK Then

    'You may have to set focus to the subform then the control

    [Forms]![MainForm].[SubFormNotes].SetFocus

    DoCmd.GoToRecord , , acNewRec 'Go to new note record, not existing one

    End If

End If

ExitStandardErrorHandling:
Exit Sub

StandardErrorHandling:

MsgBox "The following error has occured:" & vbCrLf & vbCrLf & _
            "Error Number: " & Err.Number & vbCrLf & vbCrLf & _
            "Error Description: " & Err.Description & vbCrLf & vbCrLf _
             , vbCritical, "An Error has Occurred!"

Resume ExitStandardErrorHandling

End Sub

我知道一个函数返回一个值,所以如果我将上面的代码放在一个函数中,并在每个字段的AfterUpdate事件中调用该函数,我将如何编码它以便它返回一个值?或者还有另一种方法可以减少冗余代码吗?谢谢!

1 个答案:

答案 0 :(得分:2)

根据我的经验,函数似乎不需要返回值。我已经完成了这样的功能 - 通过在选择时更改BackColor来突出显示文本框,使几个按钮对另一个共享标记的控件执行设置过程,在Active和Previous控件之间交换值等。

您应该能够直接从该编码创建一个函数,只需将第一行替换为Function UpdateNote()End Function的最后一行,然后执行查找和替换“sub”与“function

然后你可以简单地通过在After Update事件属性中直接放置=UpdateNote()(或任何你称之为功能)来调用该函数(直接在属性列表中,而不是vba或宏)。

您甚至可以一次性将它应用于所有不同字段的属性,方法是选择所有11个属性并在After Update事件属性中粘贴=UpdateNote()

它肯定有效,在我看来非常整洁干净。如果有理由不理想,我就不知道......