Проверьте, не сработал ли метод AddMember - PullRequest
0 голосов
/ 21 февраля 2019

Я пишу код в VBA (в Excel), который помещает контакты Outlook в список рассылки.

Пока это работает, но обработка ошибок в случае, если контакт не существует, не работает.MS говорит:

Если указанный получатель недействителен, метод AddMember завершится ошибкой.

Итак, как вы замечаете, что метод не работает?

Public Function olAddContactToList(ByVal sLastName As String, _
  Optional ByVal sFirstName As String, _
  Optional ByVal sGroup As String) As Boolean

  Dim oOutlook As Object    ' Outlook.Application
  Dim oNameSpace As Object  ' Outlook.NameSpace
  Dim oMAPIFolder As Object ' Outlook.MAPIFolder
  Dim oContact As Object    ' Outlook.ContactItem
  Dim oList As Object       ' Outlook.DistListItem
  Dim oMail As Object       ' Outlook.MailItem
  Dim oRecip As Object      ' Outlook.Recipient

  Const olFolderContacts = 10

  On Error GoTo ErrHandler

  Set oOutlook = CreateObject("Outlook.Application")
  Set oNameSpace = oOutlook.GetNamespace("MAPI")
  Set oMAPIFolder = oNameSpace.GetDefaultFolder(olFolderContacts)
  Set oList = oNameSpace.GetDefaultFolder(olFolderContacts).Items(sGroup)

 'Adds a member to a new distribution list
 Set oMail = oOutlook.CreateItem(olMailItem)

 'Create recipient for distlist
 Set oRecip = oOutlook.Session.CreateRecipient(sFirstName & " " & sLastName)

 oRecip.Resolve

 oList.AddMember oRecip

 oList.Save
 olAddContactToList = True

ErrHandler:
  If Err.Number <> 0 Then
    MsgBox "Fehler beim Hinzufügen des Outlook-Kontakts zu einer Liste." & vbCrLf & _
      CStr(Err.Number) & " " & Err.Description, vbExclamation + vbOKOnly

    olAddContactToList = False
  End If

  Set oContact = Nothing
  Set oMAPIFolder = Nothing
  Set oNameSpace = Nothing
  Set oOutlook = Nothing
  Set oList = Nothing
  Set oMail = Nothing
  Set oRecip = Nothing

End Function

Я пытался

Dim AddCheck As Long
AddCheck = oList.AddMember(oRecip)

, но AddCheck остается 0 независимо от того, существует ли контакт и успешно добавляется в список или не существует и не может быть добавлен.

1 Ответ

0 голосов
/ 21 февраля 2019

Поскольку Recipient.Resolve равно True или False (говорит Microsoft ), вы должны проверить это.
В противном случае у вас есть только имя и фамилия, но неполный адрес электронной почты:

If Not oRecip.Resolve Then
    ' no resulting email address
Else
    ' email address found, go further
End If

Поскольку DistListItem.AddMember даже не вызывает ошибок, если вы попытаетесь добавить простую строку номера телефона (просто не добавляете ее), я предлагаю сравнить DistListItem.MemberCount (oList.MemberCount в вашем коде) дополнительно до и после попытки добавить нового участника.

Таким образом, вы получите либо ошибку, либо неизменное число участников, если что-то пошло не так, и сможете выполнять дальнейшие проверки.

...