Udało mi się napisać kod do stworzenia zadania w Outlooku. Użyłem poniższego kodu w Private Sub OutlookTask_Click() zdefiniuj odbiorcę i również działał dobrze. Musiałem jednak dodać jakieś niestandardowe pole w moim formularzu zadań programu Outlook. Zmieniłem kod na ten, który jest wymieniony w Private Sub test1_Click(). Działa dobrze, przypisując sobie zadanie za pomocą .save. Kiedy przypisuję komuś innemu, otrzymuję perspektywę błędu, która nie może znaleźć nazwy. Opublikowana odpowiedź działała dobrze, wystarczyło zmienić MyItem na OlTask.

Private Sub OutlookTask_Click()
Dim OlApp As Outlook.Application
Dim OlTask As Outlook.TaskItem
Dim OlTaskProp As Outlook.UserProperty
Dim OlLocation As Object
Dim OlDelegate As Outlook.Recipient
Dim TName As String


Set OlApp = CreateObject("Outlook.Application")
Set OlTask = OlApp.CreateItem(olTaskItem)
Set OlTaskProp = OlLocation.UserProperties.Find("Mlocation")
TName = Me.Alias
'Set OlDelegate = OlTask.Recipients.Add(TName)

With OLTask
    .Subject = Me.Item
    .StartDate = Me.Start_Date
    .DueDate = Me.Due_Date
    .Status = TStatus
    .Importance = TPriority
    .ReminderSet = True
    .ReminderTime = Me.Due_Date - 3 & " 8:00AM"
    .Body = Me.Description
    .UserProperties("MLocation") = Me.Location


If Me.Alias = "Troy" Then
          .Save
        Else
         .Assign
         Dim myDelegate As Outlook.Recipient
         Set myDelegate = OlTask.Recipients.Add(TName)
         myDelegate.Resolve
    End If

    If myDelegate.Resolved Then
        .Send
    Else
        MsgBox "Name not Found"

    End If
MsgBox "Task Successful"
End Sub



Private Sub test1_Click()

Dim OlApp As Outlook.Application
Dim objFolder As MAPIFolder
Dim OLTask As Outlook.TaskItem
Dim OlItems As Outlook.Items
Dim OlDelegate As Outlook.Recipient
Dim TName As String
Dim TStatus As Integer
Dim TPriority As Integer

Set OlApp = CreateObject("Outlook.Application")
Set objFolder = OlApp.GetNamespace("MAPI").GetDefaultFolder(olFolderTasks)
Set OlItems = objFolder.Items
Set OLTask = OlItems.Add("IPM.Task.TroyTask")
TName = Me.Alias
Set OlDelegate = OLTask.Recipients.Add(TName)


With OLTask
    .Subject = Me.Item
    .StartDate = Me.Start_Date
    .DueDate = Me.Due_Date
    .Status = TStatus
    .Importance = TPriority
    .ReminderSet = True
    .ReminderTime = Me.Due_Date - 3 & " 8:00AM"
    .Body = Me.Description
    .UserProperties("MLocation") = Me.Location


If Me.Alias = "Troy" Then
    .Save
    Else
        .Assign
        .Send
    End If
End With
MsgBox "Task Successful"
End Sub
1
TroyL 21 listopad 2018, 18:21

1 odpowiedź

Najlepsza odpowiedź

Wygląda na to, że przesyłasz delegowane zadanie bez odpowiedniego przygotowania jego wewnętrznych struktur, ponieważ po Assign() bezpośrednio następuje Send():

If Me.Alias = "Troy" Then
    .Save
Else
    .Assign
    .Send   ' problem
End If

W takim przypadku adresaci muszą zostać rozwiązani. Zobacz rozwiązywanie nazwy delegowanego zadania widocznej w działającym . Przyjąłem go bez testowania tutaj:

If Me.Alias = "Troy" Then
    .Save
Else
    .Assign
    Dim myDelegate As Outlook.Recipient             'added
    Set myDelegate = OlTask.Recipients.Add(TName)   'added
    myDelegate.Resolve                              'added
    If myDelegate.Resolved Then                     'added
        .Send
    Else                                            'added
        'report error here                          'added
    End If                                          'added
End If

Wywołanie Resolve() może znajdować się wcześniej w kodzie, to tylko ilustracja zaczerpnięta z przykładu.

0
miroxlav 26 listopad 2018, 18:30