我的表单中有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事件中调用该函数,我将如何编码它以便它返回一个值?或者还有另一种方法可以减少冗余代码吗?谢谢!
答案 0 :(得分:2)
根据我的经验,函数似乎不需要返回值。我已经完成了这样的功能 - 通过在选择时更改BackColor来突出显示文本框,使几个按钮对另一个共享标记的控件执行设置过程,在Active和Previous控件之间交换值等。
您应该能够直接从该编码创建一个函数,只需将第一行替换为Function UpdateNote()
和End Function
的最后一行,然后执行查找和替换“sub
”与“function
”
然后你可以简单地通过在After Update事件属性中直接放置=UpdateNote()
(或任何你称之为功能)来调用该函数(直接在属性列表中,而不是vba或宏)。
您甚至可以一次性将它应用于所有不同字段的属性,方法是选择所有11个属性并在After Update事件属性中粘贴=UpdateNote()
。
它肯定有效,在我看来非常整洁干净。如果有理由不理想,我就不知道......