Устранение неполадок Outlook VBA - PullRequest
1 голос
/ 10 июня 2011

У меня есть следующий блок кода VBA, который должен создать всплывающее окно с именем для каждого контакта в папке по умолчанию.

Sub DeleteaContact()
   Dim myOutlook As Outlook.Application
   Dim myInformation As NameSpace
   Dim myContacts As Items
   Dim myItems As ContactItem

   Set myOutlook = CreateObject("Outlook.Application")
   Set myInformation = myOutlook.GetNamespace("MAPI")
   Set myContacts = myInformation.GetDefaultFolder(olFolderContacts).Items

    For Each myItems In myContacts
      MsgBox (myItems.FirstName)
    Next

End Sub

По какой-то причине я получаю случайную ошибку несоответствия типовв конце цикла.

Может кто-нибудь пролить свет на этот вопрос, почему?

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Папки могут хранить больше, чем просто ожидаемый тип данных.Измените myItems на

Dim myItems As Object

и измените окно сообщения на

Debug.Print TypeName(myItems)

Затем проверьте Немедленное окно (Ctl + G), чтобы увидеть, не является ли какой-либо из элементов ContactItem.Если вы решите, что у вас есть что-то, что не является контактом, вам просто нужно проверить это.Сохраняйте myItems как Object, но используйте код вроде

If TypeName(myItems) = "ContactItem" Then
    MsgBox myItems.FirstName
End If

Обычно я оставляю свои переменные типизированными как определенный элемент (например, ContactItem), пока пишу код, а затем преобразую их все в Object, когда я 'м сделано.Таким образом, вы получаете преимущества Intellisense во время кодирования.

0 голосов
/ 10 июня 2011

Попробуйте изменить:

MsgBox (myItems.FirstName)

до:

MsgBox myItems.FirstName

поскольку VBA не любит лишние скобки

...