2017-06-13 1 views
0

Ma macro Outlook a fonctionné à la fois, puis s'est arrêtée. Lors de l'analyse, la macro renvoie une erreur "Erreur de compilation: Variable non définie". Il semble que la macro ne reconnaît pas que ce dossier existe. J'ai coupé le code au strict minimum et c'est un problème reproductible. La macro reconnaît les dossiers standard tels que JUNK et DRAFTS mais pas PROCESSED_FOLDERS. J'ai essayé de renommer Processed_Folders ainsi que de créer un nouveau dossier avec un nom différent. Pas de joie.Outlook vba ne trouve pas de dossier existant

Structure des dossiers est:

[email protected] 
Inbox 
     Drafts 
     Sent 
     Trash 
     Junk 
     Processed_Reports 
Outbox 
Sync Issues1 (This computer only) 
SearchFolders 

CODE:

Sub testfforfolder() 
    Dim olApp As Outlook.Application 
    Dim objNS As Outlook.NameSpace 
    Dim olFolder As Outlook.MAPIFolder 
    Dim msg As Outlook.MailItem 
    Set olApp = Outlook.Application 
    Set objNS = olApp.GetNamespace("MAPI") 
    Set olFolder = objNS.GetDefaultFolder(olFolderInbox) 
    On Error GoTo xyz 
    Set olFolder = olFolder.Folders("Processed_Reports") 
    MsgBox "Folder Exists" ' This line works if I use DRAFTS or JUNK 
    Exit Sub 
xyz: 
    MsgBox ("Cannot find Folder") ' I get here if I use PROCESSED_REPORTS 
    Exit Sub 
End Sub 
+0

(1) Qu'est-ce que la ligne est mise en évidence de l'erreur « variable non définie »? (2) Votre code repose sur "[email protected]" contenant la boîte de réception par défaut. Est-ce vrai? Sur mon système, la boîte de réception par défaut est dans "fichier de données Outlook". –

+0

Au début de cette réponse, https://stackoverflow.com/a/12146315/973283, une macro peut vous aider à confirmer la cause du problème. Essayez 'Set oFolder = Session.Folders (" [email protected] "). Dossiers (" Inbox ")' –

+0

Ce script lève l'alerte "Can not Find Folder". Dans le script original, le mot INBOX était surligné dans une ligne qui disait: olm.Move Inbox.Folders ("Processed_Reports") [Note: olm était DIM olm As Outlook.MailItem] Après avoir lutté, j'ai isolé le problème de cette question de ne pas reconnaître le dossier. –

Répondre

0

Merci au commentaire de Tony Dallimore j'ai pu résoudre le problème. Le lien vers https://stackoverflow.com/a/12146315/973283 m'a permis de résoudre le problème. Avec une version mise à jour d'Outlook, le compte de messagerie par défaut était référencé plutôt que le compte de l'élément sélectionné. Le dossier Processed_Reports n'existait que dans un dossier de compte différent. La solution, comme Tony l'a suggéré, était de définir le dossier cible sur le chemin complet de la cible. J'avais besoin d'un niveau de plus comme indiqué dans la solution de travail ci-dessous.

Sub testfforfolder() 
     Dim olApp As Outlook.Application 
     Dim objNS As Outlook.NameSpace 
    Dim olFolder As Outlook.MAPIFolder 
    Dim msg As Outlook.MailItem 
    Set olApp = Outlook.Application 
    Set objNS = olApp.GetNamespace("MAPI") 
    Set olFolder = objNS.GetDefaultFolder(olFolderInbox) 
    On Error GoTo xyz 
'OLD INCORRECT  
    'Set olFolder = olFolder.Folders("Processed_Reports") 
'WORKING CORRECTION 
    Set TgtFolder= _ 
    Session.Folders("[email protected]"). _ 
    Folders("Inbox").Folders("Processed_Reports") 

    MsgBox "Folder Exists" ' This line works if I use DRAFTS or JUNK 
    Exit Sub 
xyz: 
    MsgBox ("Cannot find Folder") ' I get here if I use PROCESSED_REPORTS 
    Exit Sub 
End Sub 
0

est ici un moyen d'obtenir le dossier de session sans connaître le nom de la session

Sub topFolder() 

    Dim topFolder As Folder 
    Set topFolder = Application.Session.GetDefaultFolder(olFolderInbox).Parent 

    Dim i As Integer 

    For i = 1 To topFolder.Folders.Count 
     Debug.Print topFolder.Folders(i).Name 
    Next i 

    For i = 1 To topFolder.Folders("inbox").Folders.Count 
     Debug.Print topFolder.Folders("inbox").Folders(i).Name 
    Next i 

End Sub