2017-06-13 109 views
0

我的Outlook宏一次工作,然後停止。當它解析時,宏會引發錯誤「編譯錯誤:變量未定義」。看起來宏不知道該文件夾存在。我將代碼截至最低限度,這是一個可重複的問題。該宏將識別標準文件夾,如JUNK和DRAFTS,但不是PROCESSED_FOLDERS。我嘗試重命名Processed_Folders以及使用不同的名稱創建一個新文件夾。沒有快樂。Outlook vba未找到現有文件夾

文件夾結構:

[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)強調了錯誤「無法定義的變量」什麼線? (2)您的代碼依賴於包含默認收件箱的「[email protected]」。這是真的?在我的系統上,默認收件箱位於「Outlook數據文件」中。 –

+0

在本答案開頭,https://stackoverflow.com/a/12146315/973283,有一個宏可以幫助確認問題的原因。嘗試'設置oFolder = Session.Folders(「[email protected]」)。文件夾(「收件箱」)' –

+0

此腳本引發「找不到文件夾」消息框警報。在原始腳本中,INBOX這個單詞被突出顯示爲一行,其內容如下:olm.Move Inbox.Folders(「Processed_Reports」)[注意:olm是DIM olm As Outlook.MailItem]在掙扎之後,我將問題隔離爲不識別文件夾。 –

回答

0

感謝託尼Dallimore評論我能夠解決這個問題。鏈接到https://stackoverflow.com/a/12146315/973283讓我解決了這個問題。使用Outlook的更新版本時,將引用默認電子郵件帳戶而不是所選項目的帳戶。 Processed_Reports文件夾只存在於另一個帳戶文件夾中。正如託尼建議的那樣,解決方案是將目標文件夾設置爲目標的完整路徑。我確實需要更多層次,如下面的工作解決方案所示。

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

這裏是一種方式來獲得會話文件夾不知道會話名稱

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