0

我有类似于以下的代码,我想修改:

Sub SendEmail()

    Dim myOlApp As Outlook.Application
    Dim myItem As Outlook.MailItem

    'Create an Outlook application object
    Set myOlApp = New Outlook.Application

    'Create a new MailItem form
    Set myItem = myOlApp.CreateItem(olMailItem)

    'Build and display item
    With myItem
                .To = “test@test.com”
                .Subject = “Test Subject”
                .HTMLBody = “Test Body”
                .Display
                .SaveAs “C:\Test.msg”, olMSG   
    End With

结束子

此代码从整个应用程序中的各种按钮调用。单击按钮时,将创建并保存新电子邮件。不幸的是,电子邮件在创建后立即保存,在发送之前......因此,如果对其进行了任何修改,它们将不会出现在保存的版本中。

我该怎么做才能修改此代码以仅在发送电子邮件后保存?

如有必要,请随时提出任何后续问题,我会尽我所能作出回应。

谢谢!

罗伯特

4

2 回答 2

2

您可以将 Outlook 事件与 Access 一起使用。对于此示例,您将需要一个名为 clsOlMail 的类模块,其中包含以下代码:

''Requires reference to the Microsoft Outlook x.x Object Library
Dim WithEvents conItems As Outlook.Items

Private Sub Class_Initialize()
   Set oApp = Outlook.Application
   Set oNS = oApp.GetNamespace("MAPI")
   Set conFolder = oNS.GetDefaultFolder(olFolderSentMail)
   Set conItems = conFolder.Items
End Sub

Private Sub Class_Terminate()
   Set conItems = Nothing
   Set conFolder = Nothing
   Set oNS = Nothing
   Set oApp = Nothing
End Sub

Sub ConItems_ItemAdd(ByVal Item As Object)
Dim frm As Form

   Set frm = Forms!frmEmailDetails

   frm.txtSenderName = Item.SenderName
   frm.txtSentOn = Item.SentOn
   frm.txtTo = Item.To
   frm.txtCreationTime = Item.CreationTime
   frm.txtBCC = Item.BCC
   frm.txtCC = Item.CC
   frm.txtSentOnBehalfOfName = Item.SentOnBehalfOfName
   frm.txtSubject = Item.Subject
   frm.txtBody = Item.Body
End Sub

您还需要一个名为 frmEmailDetails 的表单,其中包含以下文本框:

txtSenderName, txtSentOn, txtTo, txtCreationTime, txtBCC, txtCC, txtSentOnBehalfOfName, txtSubject, txtBody

而这段代码:

Private oEvent As clsOLMail
''Requires reference to Microsoft Outlook x.x Object Library

Public oApp As Outlook.Application
Public oNS As Outlook.NameSpace
Public conFolder As Outlook.MAPIFolder

Private Sub Form_Open(Cancel As Integer)
   Set oEvent = New clsOlMail
End Sub 

打开表单并通过 Outlook 发送电子邮件,您可以使用上面显示的示例之一。表单字段应填写已发送电子邮件中的相关详细信息。您可能会收到 Outlook 安全警告。

来自:http ://wiki.lessthandot.com/index.php/Access_and_Email

于 2009-09-04T19:46:51.127 回答
0

问题是新创建的项目没有 EntryID。一旦您保存/发送此项目,参考不再是好的。为什么可能是由于 MAPI 的工作方式。Remou 建议使用 ItemAdd 事件来处理新添加到特殊文件夹“Sent Items”中的项目。从此事件中,您可以保存消息。我看到的唯一问题是您如何知道传递的项目是已发送的项目。您正在调用 Display,它允许用户在不发送的情况下预览、编辑、发送或关闭消息。因此,该项目可能不是您创建的邮件项目。要解决此问题,请向您的邮件项目添加自定义属性。当 ItemAdd 事件被触发时,您可以检查自定义属性的传递项,并在需要时保存。

于 2009-09-05T02:04:57.707 回答