Принудительно обновлять объект `Recipients` при редактировании текстового поля To: - PullRequest
2 голосов
/ 17 сентября 2010

Я сортирую получателей при составлении письма.

Если у меня есть 3 получателя (например), запустите макрос сортировки, а затем удалите получателя из текстового поля «Кому:», запустив макрос во второй раз.вызывает повторное появление удаленного получателя.Когда я выполняю макрос во втором запуске, я вижу, что и у .CurrentItem.To, и у объекта Recipients все 3 получателя.

Это прерывисто.Есть ли способ принудительно обновить объект Recipients, когда текстовое поле To: было отредактировано?

Я не могу найти ничего в Outlook VBA документации проб и ошибококазался бесплодным.

Код выдержки:

Public Sub SortRecipients()
    With Application.ActiveInspector
        If TypeOf .CurrentItem Is Outlook.MailItem Then
            Debug.Print "Before: "
            Debug.Print "To: " & .CurrentItem.To
            Debug.Print "# of recipients: " & .CurrentItem.Recipients.Count

            ' Force an update if recipients have changed (DOESN'T HELP)
            .CurrentItem.Recipients.ResolveAll

            Set myRecipients = .CurrentItem.Recipients
            ' Create objects for To list
            Dim myRecipient As recipient
            Dim recipientToList As Object
            Set recipientToList = CreateObject("System.Collections.ArrayList")

            ' Create new lists from To line
            For Each myRecipient In myRecipients
                    recipientToList.Add myRecipient.Name
            Next

            ' Sort the recipient lists
            recipientToList.Sort
            ' Remove all recipients so we can re-add in the correct order
            While myRecipients.Count > 0
                myRecipients.Remove 1
            Wend

            ' Create new To line
            Dim recipientName As Variant
            For Each recipientName In recipientToList
                myRecipients.Add (recipientName)
            Next recipientName
            .CurrentItem.Recipients.ResolveAll

        End If
    End With
End Sub

Шаги для воспроизведения:

  1. Добавьте 4 получателей в строку «Кому» нового электронного письма в Outlook2007 (нажмите «Проверить имена», чтобы разрешить адреса.)
  2. Запустите макрос SortRecipients.(Получатели теперь отсортированы)
  3. Удалить одного получателя, повторно запустить макрос SortRecipients.
  4. После этого у меня все еще есть 4 получателя (удаленный возвращается).

1 Ответ

1 голос
/ 12 августа 2011

Вы можете (и должен ) добавить Option Explicit, Outlook сказал бы вам, что myRecipients не было объявлено в начале вашего кода.

Я добавил:

Dim myRecipients As Recipients

[EDIT] Этого было недостаточно для обновления поля To.Я попробовал несколько вещей, но в итоге я добавил .CurrentItem.Save вместо вашей попытки .CurrentItem.Recipients.ResolveAll

Я думаю, что я заставил это работать таким образом в моем Outlook 2007.

...