La raison pour laquelle votre code ne fonctionne pas, par exemple lorsque vous accédez à une bibliothèque avec une liaison tardive, par exemple. en utilisant CreateObject("Outlook.Application")
, les énumérations intégrées à la bibliothèque ne sont pas disponibles.
Depuis que vous n'avez pas utilisé le Option Explicit
directive, Excel a automatiquement déclaré olFolderContacts
en tant que variable de type Variant avec une valeur de Empty
. Cette est l'argument non valide auquel le message d'erreur fait référence.
Si vous souhaitez continuer à utiliser la liaison tardive, ajoutez le code suivant pour que les constantes soient disponibles:
'v0.1.1
' Required if late binding Outlook
' (Note that this list excludes newer values available in Outlook 2010 or later)
Private Enum OlDefaultFolders
olFolderDeletedItems = ------------3
olFolderOutbox = ------------------4
olFolderSentMail = ----------------5
olFolderInbox = ------------------(6)
olFolderCalendar = ----------------9
olFolderContacts = --------------(10)
olFolderJournal = ----------------11
olFolderNotes = ------------------12
olFolderTasks = ------------------13
olFolderDrafts = ----------------(16)
olPublicFoldersAllPublicFolders = 18
olFolderConflicts = --------------19
olFolderSyncIssues = ------------(20)
olFolderLocalFailures = ----------21
olFolderServerFailures = --------(22)
olFolderJunk = ------------------(23)
olFolderRssFeeds = --------------(25)
olFolderToDo = ------------------(28)
olFolderManagedEmail = ----------(29)
End Enum
ou coder en dur les valeurs:
'v0.1.0
Set OutlookApp = CreateObject("Outlook.Application")
Set myNamespace = OutlookApp.GetNameSpace("MAPI")
Set myFolder = myNamespace.GetDefaultFolder(10)
myFolder.Display
Notez que j'ai changé le nom de la variable pour l'objet Application Outlook afin d'éviter toute confusion avec l'objet intégré. Application
objet.
Je trouve préférable, au moins lors de l'élaboration du code, d'utiliser la liaison anticipée. Pour ce faire, vous ajoutez une référence à la bibliothèque d'objets Outlook dans le projet:
et en utilisant le code suivant:
'v0.1.0
Dim OutlookApp As Outlook.Application
Set OutlookApp = New Outlook.Application
Dim myNamespace As Outlook.Namespace
Set myNamespace = OutlookApp.GetNameSpace("MAPI")
Dim myFolder As Outlook.MAPIFolder
Set myFolder = myNamespace.GetDefaultFolder(olFolderContacts)
myFolder.Display
Un dernier conseil est de toujours utiliser le Option Explicit
directive, et toujours déclarer explicitement toutes vos variables.
Le meilleur moyen de s’assurer que cela se produit est de définir le Require Variable Declaration
option:
De cette façon, le VBE insérera toujours la directive dans chaque module créé.