2011-06-09 5 views
1

J'ai le bloc suivant de code VBA, qui devrait créer une boîte popup avec le prénom pour chaque contact dans mon dossier par défaut.Outlook VBA dépannage

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 

Pour une raison quelconque, j'obtiens une erreur de non-concordance de type sporadique à la fin de la boucle.

Quelqu'un peut-il faire la lumière sur ce sujet? Pourquoi?

Répondre

0

Essayez de changer:

MsgBox (myItems.FirstName)

à:

MsgBox myItems.FirstName

comme VBA n'aime pas entre parenthèses inutiles

1

Des dossiers peuvent stocker plus que le type de données » d attendre. Changer myItems à

Dim myItems As Object 

et changer la boîte de message à

Debug.Print TypeName(myItems) 

Vérifiez ensuite la fenêtre immédiate (G + ctrl) pour voir si l'un des éléments ne sont pas ContactItem. Si vous déterminez que vous avez quelque chose qui n'est pas un contact, il vous suffit de le tester. Gardez myItems comme objet, mais utiliser le code

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

En général, je laisse mes variables typées comme élément spécifique (par exemple ContactItem) pendant que je vous écris le code, puis les convertir à l'objet quand je suis fait . De cette façon, vous bénéficiez des avantages d'Intellisense pendant le codage.

Questions connexes