0

在 Outlook 2010 VBA 中,我想在发送电子邮件时创建一个任务。

我想将电子邮件中的所有附件添加到任务中。

我试过.Attachments.Add(不支持), .Attachments = item.Attachments返回属性是只读的。

是否有可能或如何将电子邮件附加到任务中?

Public WithEvents myOlApp As Outlook.Application

Private Sub Application_MAPILogonComplete()

End Sub

Private Sub Application_Startup()
    Initialize_handler
End Sub

Public Sub Initialize_handler()
    Set myOlApp = CreateObject("Outlook.Application")
End Sub

Private Sub myOlApp_ItemSend(ByVal item As Object, Cancel As Boolean)
    
Dim intRes As Integer
Dim strMsg As String
Dim objTask As TaskItem
Set objTask = Application.CreateItem(olTaskItem)
Dim strRecip As String
Dim att As MailItem
Dim objMail As Outlook.MailItem

strMsg = "Do you want to create a task for this message?"
intRes = MsgBox(strMsg, vbYesNo + vbExclamation, "Create Task")
      
If intRes = vbNo Then
    Cancel = False
Else
      
    For Each Recipient In item.Recipients
        strRecip = strRecip & vbCrLf & Recipient.Address
    Next Recipient
    
    With objTask
        '.Body = strRecip & vbCrLf & Item.Body
        .Body = item.Body
        .Subject = item.Subject
        .StartDate = item.ReceivedTime
        .ReminderSet = True
        .ReminderTime = DateSerial(Year(Now), Month(Now), Day(Now + 1)) + #8:00:00 AM#
        **.Attachments.Add (item.Attachments)**
        .Save
    End With

    Cancel = False
      
End If

Set objTask = Nothing
    
End Sub
4

2 回答 2

1

这是我的最终代码

Public WithEvents myOlApp As Outlook.Application

Private Sub Application_MAPILogonComplete()

End Sub

Private Sub Application_Startup()
 Initialize_handler
End Sub

Public Sub Initialize_handler()
 Set myOlApp = CreateObject("Outlook.Application")
End Sub

Private Sub myOlApp_ItemSend(ByVal item As Object, Cancel As Boolean)

Dim intRes As Integer
Dim strMsg As String
Dim objTask As TaskItem
Set objTask = Application.CreateItem(olTaskItem)
Dim strRecip As String
Dim att As MailItem
Dim objMail As Outlook.MailItem
Dim Msg As Variant

strFolderPath = "C:\temp" ' path to target folder


strMsg = "Do you want to create a task for this message?"
intRes = MsgBox(strMsg, vbYesNo + vbExclamation, "Create Task")


If intRes = vbNo Then
  Cancel = False
Else

For Each Recipient In item.Recipients
    strRecip = strRecip & vbCrLf & Recipient.Address
Next Recipient

item.SaveAs strFolderPath & "\" & "test" & ".msg", olMSG

'item.Save

With objTask
    '.Body = strRecip & vbCrLf & Item.Body
    .Body = item.Body
    .Subject = item.Subject
    .StartDate = item.ReceivedTime
    .ReminderSet = True
    .ReminderTime = DateSerial(Year(Now), Month(Now), Day(Now + 1)) + #8:00:00 AM#
    .Attachments.Add item
    .Save
End With

Cancel = False

End If

Set objTask = Nothing

End Sub
于 2013-02-26T14:57:41.613 回答
1

Attachments.Add 允许将字符串作为参数(完全查询的附件文件名)或 Outlook 项目(例如 MailItem)传递。你将附件集合作为参数传递,你不能这样做。

对于每个附件,首先保存附件(Attachment.SaveAsFile),然后将它们一次添加到任务中,并传递文件名作为参数。

于 2013-02-25T17:09:01.057 回答