Проверьте, обновлен ли элемент управления - PullRequest
0 голосов
/ 27 мая 2020

Моя цель - отправить электронное письмо автору записи, если кто-то внес изменения в эту запись. Я нашел if Updated(ctl) через поиск Google, но страница не определила полезную нагрузку этой функции. Полагаю, я мог бы выполнить DLookup на каждом элементе управления, но, похоже, это займет очень много времени. Есть ли способ быстро определить, был ли обновлен элемент управления?

Private Sub Form_AfterUpdate()
On Error GoTo Form_AfterUpdate_Err
Dim ctl As Control
Dim updates As String
For Each ctl In Me.Controls
    If Updated(ctl) Then
        updates = updates & ctl.Name & " has been updated to " & ctl.value & vbCrLf
    End If
Next ctl

If Len(updates) > 0 Then
    Dim appOutlook As Outlook.Application
    Dim newEmail As Outlook.MailItem
    Dim signature As String
    Set appOutlook = CreateObject("Outlook.Application")
    Set newEmail = appOutlook.CreateItem(olMailItem)

    With newEmail
        signature = .Body
        .BodyFormat = olFormatRichText
        .To = DLookup("[email]", "[tbl_users]", "[checkNumber] = '" & Me.a10_contact_name & "'")
        .Subject = Me.a1_mva_reference
        .Body = DLookup("[firstName]", "[tbl_users]", "[checkNumber] = '" & Me.a10_contact_name & "'") & "," & vbCrLf & vbCrLf & _
            "This email is regarding " & Me.a1_mva_reference & " - " & Me.a13_description & vbCrLf & vbCrLf & _
            updates & vbCrLf & vbCrLf & _
            signature
            .Display
    End With

End If

Form_AfterUpdate_Exit:
        Exit Sub
Form_AfterUpdate_Err:
        Dialog.Box (Error$)
        Resume Form_AfterUpdate_Exit
End Sub

1 Ответ

1 голос
/ 28 мая 2020

Я решил проблему. Сработала следующая модификация кода.

Старый код:

Dim ctl As Control
Dim updates As String
For Each ctl In Me.Controls
    If Updated(ctl) Then
        updates = updates & ctl.Name & " has been updated to " & ctl.value & vbCrLf
    End If
Next ctl

Новый код:

If Me.Dirty Then
    Dim ctl As Control
    Dim updates As String
    Dim signature As String
    For Each ctl In Me.Controls
        If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
            If ctl.value <> ctl.OldValue Then
                updates = updates & ctl.Name & " has been updated from " & ctl.OldValue & " To " & ctl.value & "<br>"
            End If
        End If
    Next ctl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...