2015-03-13 5 views
0

Мне нужно создать задачу Outlook из общего почтового ящика. До сих пор, когда под кодом работает, задача создается с владельцем общего почтового ящика, как я хочу, но при сохранении я получаю сообщение «Вы должны быть в папке с общедоступной папкой, чтобы изменить имя владельца задачи», и владелец возвращается мне.Создать задачу 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 "[email protected]" 'workaround to assign task for another owner, but does not show .BCC so not suitable solution. 
     .Owner = "[email protected]" ' 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 

ответ

0

Вместо использования Application.CreateItem, вызовите Application.Session.CreateRecipient передавая имя или адрес владельца почтового ящика, вызовите Application.Session.GetSharedDefaultFolder, а затем использовать MAPIFolder.Items.Add.

UPDATE:

Set OlApp = CreateObject("Outlook.Application") 
set NS = olApp.getNamespace("MAPI") 
NS.Logon 
ste Recip = NS.CreateRecipient("[email protected]") 
set SharedFolder = NS.GetSharedDefaultFolder(Recip, olFoldersTasks) 
Set OlTask = SharedFolder.Items.Add 
... 
+0

Hi Dmitry. Я не настолько опытен в vba. Как вы думаете, вы могли бы дать фрагмент кода adapttef с вашим предложением? Когда я пытаюсь это сделать, я просто не могу заставить его работать. Спасибо за ваш ответ – Trm

+0

См. Обновленный ответ. –

+0

Привет. Я попытался этим утром запустить код, но не смог заставить его работать. Он работает, но не создает никакой задачи. У вас есть идея, что может быть неправильным? – Trm

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 "[email protected]" 
     '.Owner = "[email protected]" ' 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 
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... 

Где «х» означает для общих Входящих ID (для меня это 5). Вы можете использовать MsgBox Prompt:=objOLApp.Session.Folders.Item(x) для проверки. Он должен вернуть общий адрес входящей почты на правильный идентификатор ([email protected]).

Смежные вопросы