从共享收件箱创建Outlook任务

时间:2015-03-13 17:16:12

标签: vba outlook task

我需要从共享收件箱创建Outlook任务。到目前为止,当下面的代码运行时,任务是根据我的需要创建共享收件箱的所有者,但是当保存时我得到"您必须在公共文件夹中更改任务的所有者字段"错误和所有者更改回我。

我无法找到解决方案,或者可能超出了我的理解范围。我很感激帮助。谢谢!

If task = "YES" Then
   user_task = "GR"
   Const olTaskItem = 3
   Dim OlApp As Object
   Dim OlTask As Object

   Set OlApp = CreateObject("Outlook.Application")
   Set OlTask = OlApp.CreateItem(olTaskItem)

   With OlTask
       '.Assign
       '.Recipients.Add "shared@inbox.com" 'workaround to assign task for another owner, but does not show .BCC so not suitable solution.
       .Owner = "shared@inbox.com" ' does not work. changes back to my user
       .Subject = material_full_email & " spp "
       .StartDate = Date
       .DueDate = Date + 7
       .Status = 1                 '0=not started, 1=in progress, 2=complete, 3=waiting,
                                   '4=deferred
       .Importance = 1             '0=low, 1=normal, 2=high
       .ReminderSet = False
       '.ReminderTime = dtReminderDate
       '.Categories = "Business" 'use any of the predefined Categorys or create your own
       .Body = Date & " " & user_task & ":" & " RFQ sent: " & Supplier1 & " / " & Supplier2 & " / " & Supplier3 & " / " & Supplier4
       '.Save   'use .Display if you wish the user to see the task form and make
       .Display       'them perform the save
   End With
End If

3 个答案:

答案 0 :(得分:0)

不要使用Application.CreateItem,而是通过Application.Session.CreateRecipient来传递邮箱所有者的姓名或地址,请致电Application.Session.GetSharedDefaultFolder,然后使用MAPIFolder.Items.Add

<强>更新

Set OlApp = CreateObject("Outlook.Application")
set NS = olApp.getNamespace("MAPI")
NS.Logon
ste Recip = NS.CreateRecipient("someuser@company.demo")
set SharedFolder = NS.GetSharedDefaultFolder(Recip, olFoldersTasks)
Set OlTask = SharedFolder.Items.Add
...

答案 1 :(得分:0)

我设法获得了以下代码工作。我认为最大的问题是MS Outlook库没有在参考文献中打勾。

If task = "YES" Then
   user_task = "GR"
   Const olTaskItem = 3
   Dim olApp As Object
   Dim ns As Object
   Dim OlTask As Object
   Dim SharedFolder As Object
   Set olApp = CreateObject("Outlook.Application")
   Set ns = olApp.GetNamespace("MAPI")
   ns.Logon
   Set Recip = ns.CreateRecipient("inboxname")
   Set SharedFolder = ns.GetSharedDefaultFolder(Recip, olFolderTasks)
   Set OlTask = SharedFolder.Items.Add("IPM.Task")
   'Set OLApp = CreateObject("Outlook.Application")
   'Set OlTask = OLApp.CreateItem(olTaskItem)

   With OlTask
       '.Assign
       '.Recipients.Add "shared@inbox.com"
       '.Owner = "shared@inbox.com" ' not needed
       .Subject = material_full_email & " spp "
       .StartDate = Date
       .DueDate = Date + 7
       .Status = 1                 '0=not started, 1=in progress, 2=complete, 3=waiting,
                                   '4=deferred
       .Importance = 1             '0=low, 1=normal, 2=high
       .ReminderSet = False
       '.ReminderTime = dtReminderDate
       '.Categories = "Business" 'use any of the predefined Categorys or create your own
       .Body = Date & " " & user_task & ":" & " RFQ sent to suppliers: " & Supplier1 & " / " & Supplier2 & " / " & Supplier3 & " / " & Supplier4
       '.Save   'use .Display if you wish the user to see the task form and make
       .Display       'them perform the save
   End With
End If

答案 2 :(得分:0)

我认为我有更简单的事情:

Dim objOLApp As Outlook.Application
Dim NewTask As Outlook.TaskItem
' Set the Application object
Set objOLApp = New Outlook.Application
Set NewTask = objOLApp.Session.Folders.Item(x).Items.Add(olTaskItem)
With NewTask...

其中'x'代表您的共享收件箱ID(对我而言,这是5)。您可以使用MsgBox Prompt:=objOLApp.Session.Folders.Item(x)进行检查。它应该返回正确ID(adress@server.com)上的共享收件箱地址。