首页 > 解决方案 > 运行宏(特别是电子邮件)时如何更新字段(特别是日期)

问题描述

我正在使用默认访问模板(联系人)之一,并希望在任何时候单击联系人上的电子邮件按钮时捕获日期。这会运行一个调用该EMailDatabaseObject操作的宏。我想添加一个可以运行查询的操作:

UPDATE CONTACTS SET lastemail = GetDate() WHERE ID=[ID];

我也不知道如何让它把 ID 字段放在那里。

标签: sqlvbaemailms-access

解决方案


有很多不同的方法可以做你想做的事。我将为您列出三种不同的选择。

1.如果你真的想使用嵌入的宏,你可以这样做:

  1. 在表中添加字段LastEmail(日期)Contacts
  2. 将字段添加到表单Contact Details中。
  3. 在表单中设置新字段的属性Visible = False
  4. 在嵌入的宏中,您可以添加一行来执行以下操作:

    SetValue
        Item = [LastEmail]
        Expression = Now()
    

2.您可以使用代码和宏的组合:

  1. 您可以进入 VBA 编辑器 ( ALT+F11)。
  2. 插入一个模块并粘贴以下函数:

    Function updateEmailTime()
        CurrentDb.Execute "UPDATE CONTACTS SET lastemail = Now() WHERE ID=" & [Form_Contact List].[ID]
    End Function
    
  3. 编辑事件中的嵌入宏OnClick以包含一行RunCode并使用您的新函数updateEmailTime

3.如果你想完全用代码来做,你可以用以下内容替换OnClick电子邮件按钮事件中的嵌入宏[Event Procedure]

Private Sub cmdEmail_Click()
    Dim objOutlook As Object
    Dim objMail As Object

    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(0)

    ' Send the email
    With objMail
        .To = [Form_Contact List].E_mail_Address
        .Subject = "This is the subject."
        .Body = "This is the body."
        .Display '(If you want to see the email and send it yourself)
        '.Send '(If you want to send the email without seeing it)
    End With

    ' Update the time.
    CurrentDb.Execute "UPDATE CONTACTS SET lastemail = Now() WHERE ID=" & [Form_Contact List].[ID]

    ' Clean up the objects
    Set objMail = Nothing
    Set objOutlook = Nothing
End Sub

我倾向于使用代码而不是使用 Access 的宏生成器来做事。你会发现一切都变得容易了。确保在表中为所有替代项创建新字段。


推荐阅读