O motivo pelo qual seu código não está funcionando porque, quando você está acessando uma biblioteca com ligação tardia, por exemplo, usando CreateObject("Outlook.Application")
, as enumerações construídas na biblioteca não estão disponíveis.
Como você não usou a diretiva Option Explicit
, o Excel declarou automaticamente olFolderContacts
como uma variável do tipo Variant com um valor Empty
. Esse é o argumento inválido ao qual a mensagem de erro está se referindo.
Se você deseja continuar usando ligação tardia, adicione o seguinte código para que as constantes estejam disponíveis:
'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 codifique os valores:
'v0.1.0
Set OutlookApp = CreateObject("Outlook.Application")
Set myNamespace = OutlookApp.GetNameSpace("MAPI")
Set myFolder = myNamespace.GetDefaultFolder(10)
myFolder.Display
Observe que alterei o nome da variável para o objeto Aplicativo do Outlook para evitar qualquer confusão com o objeto Application
incorporado.
Acho melhor, pelo menos enquanto desenvolvo o código, usar a vinculação antecipada. Você faz isso adicionando uma referência à biblioteca de objetos do Outlook no projeto:
eusandooseguintecódigo:
'v0.1.0DimOutlookAppAsOutlook.ApplicationSetOutlookApp=NewOutlook.ApplicationDimmyNamespaceAsOutlook.NamespaceSetmyNamespace=OutlookApp.GetNameSpace("MAPI")
Dim myFolder As Outlook.MAPIFolder
Set myFolder = myNamespace.GetDefaultFolder(olFolderContacts)
myFolder.Display
Uma dica final é sempre usar a diretiva Option Explicit
e sempre declarar explicitamente todas as suas variáveis.
A melhor maneira de garantir isso é definir a opção Require Variable Declaration
:
Dessa forma, o VBE sempre inserirá a diretiva em todos os módulos criados.