一次更新Me.txtWhatever.Value和DoCmd.Requery一次多个字段

时间:2019-01-29 14:04:14

标签: vba ms-access

我更多地是在寻找建议,以使一些混乱的代码变得更加整洁,并减少一些“垃圾邮件”。

我有一个控件(按钮),该控件将多个值保存到表的多个列中(每列一个值)。这不只是一个问题,而是我在一个控件上处理多个重复命令时正在寻找最佳实践

当前,这是我正在使用的代码,并不是那么糟糕,因为我希望有一种更短的更有效的方法来管理我要完成的工作。

Private Sub cmdSave_Click()
On Error GoTo cmdSave_Click_Err

    DoCmd.RunCommand acCmdSaveRecord
    MsgBox "Service Record has been saved", vbInformation, ""
    DoCmd.Requery "txtFirstHistory"
    DoCmd.Requery "txtSecondHistory"
    DoCmd.Requery "txtOctoHistory"
    DoCmd.Requery "txtInflatorHistory"
    DoCmd.Requery "txtHPSPGHistory"
    DoCmd.Requery "txtComputerHistory"
    Me.txtFirstNotes.Value = ""
    Me.txtSecondNotes.Value = ""
    Me.txtOctoNotes.Value = ""
    Me.txtInflatorNotes.Value = ""
    Me.txtHPSPGNotes.Value = ""
    Me.txtComputerNotes.Value = ""
cmdSave_Click_Exit:
    Exit Sub

cmdSave_Click_Err:
    MsgBox Error$
    Resume cmdSave_Click_Exit

End Sub

有没有一种方法可以用更少的代码行来完成此任务?

1 个答案:

答案 0 :(得分:1)

这似乎是一种很奇怪的处理方式,但是您可能有自己的理由。

您可以使用如下循环:

Dim ctl As Access.Control

For Each ctl In Me.Controls
    If ctl.ControlType = acTextBox Then
        ' Instead of relying on ctl.Name you could also use ctl.Tag
        If ctl.Name Like "*History" Then
            ctl.Requery
            ' or DoCmd.Requery ctl.Name
        ElseIf ctl.Name Like "*Notes" Then
            ctl.Value = ""
        End If
    End If
Next ctl