精選
[Outlook VBA] 快速的把讀取窗格全部關掉
2009/06/09 02:34
瀏覽6,800
迴響3
推薦3
引用0
*這裡所說的 "Outlook" 是指 "Microsoft Office (我用的是2003版)" 裡的 Outlook,不是 Outlook Express。Outlook Express 不支援 VBA。
Outlook 2003 的信件的讀取窗格 (Preview Pane) 是每個資料夾個別設定的。有位朋友問:『有什麼辦法設定 "關" 而全部資料夾的信件讀取窗格就關掉?因為他的信件資料夾分類少說有100個 (好嚇人!),每次系統重灌就要全部一個一個關掉,實在太累了說!!』
我特別針對他的問題,用 VBA 寫了 Outlook 巨集。把底下的程式碼貼到 Outlook 裡去,然後執行 HideAllPreviewPanes 這個巨集,就可以把收件匣、寄件匣、垃圾郵件這三個資料夾,和它們裡面所有的子資料夾(subfolders) 的 "讀取窗格" 統統關掉。
Sub HideAllPreviewPanes()
Dim myNameSpace As Outlook.NameSpace
Dim myFolder As Outlook.MAPIFolder
Dim c As Variant, arrC As Variant
arrC = Array(olFolderInbox, olFolderOutbox, olFolderJunk)
Set myNameSpace = Application.GetNamespace("MAPI")
For Each c In arrC
Set myFolder = myNameSpace.GetDefaultFolder(c)
Call HideFolderPreviewPane(myFolder)
Next c
End Sub
Sub HideFolderPreviewPane(ByRef thisFolder As Outlook.MAPIFolder)
Dim subFolder As Outlook.MAPIFolder
Set Application.ActiveExplorer.CurrentFolder = thisFolder
Do
i = i + 1
DoEvents
Loop Until i = 9999 'Delay
Application.ActiveExplorer.ShowPane olPreview, False
If thisFolder.Folders.Count <> 0 Then
For Each subFolder In thisFolder.Folders
Call HideFolderPreviewPane(subFolder)
Next subFolder
End If
End Sub
Dim myNameSpace As Outlook.NameSpace
Dim myFolder As Outlook.MAPIFolder
Dim c As Variant, arrC As Variant
arrC = Array(olFolderInbox, olFolderOutbox, olFolderJunk)
Set myNameSpace = Application.GetNamespace("MAPI")
For Each c In arrC
Set myFolder = myNameSpace.GetDefaultFolder(c)
Call HideFolderPreviewPane(myFolder)
Next c
End Sub
Sub HideFolderPreviewPane(ByRef thisFolder As Outlook.MAPIFolder)
Dim subFolder As Outlook.MAPIFolder
Set Application.ActiveExplorer.CurrentFolder = thisFolder
Do
i = i + 1
DoEvents
Loop Until i = 9999 'Delay
Application.ActiveExplorer.ShowPane olPreview, False
If thisFolder.Folders.Count <> 0 Then
For Each subFolder In thisFolder.Folders
Call HideFolderPreviewPane(subFolder)
Next subFolder
End If
End Sub
在 HideAllPreviewPanes() 裡,用迴圈重覆呼叫HideFolderPreviewPane(),分別處理收件匣、寄件匣、垃圾郵件這三個資料夾。你若讀過 把 email 附件檔全部存入一個資料夾 這篇文章,就知道 "olFolderInbox, olFolderOutbox, olFolderJunk" 這三個常數的意義。
在 HideFolderPreviewPane() 裡,先把指定的資料夾設為 Active (就是Current Folder),然後用 ShowPane 方法,把 "olPreview" 也就是指 "Preview Pane" 關掉。經實驗得證,這兩個動作之間必須延遲一下,才能得到預期效果。
因為資料夾可能有子資料夾,子資料夾又可能有孫資料夾,無法預期有幾層,所以我用 "遞迴呼叫 (Recursion Call)" 的做法寫 HideFolderPreviewPane() ,也就是如果有子資料夾, HideFolderPreviewPane() 就呼叫它自己來處理子資料夾。
※ 關於如何在 Outlook 裡執行巨集,請看這篇文章: 在 Outlook 裡使用巨集
你可能會有興趣的文章:
迴響(3) :
- 3樓. ALEX2011/06/16 11:49使用有效性?
您好
感謝提供此一方式 但我執行巨集後直接跳到垃圾郵件夾且未全部關閉預覽耶!?
想請問有要修正哪裡嗎? 謝謝
可以更詳細的描述你的執行環境嗎? 例如: Windows 版本, Office (Outlook) 版本... ...
因我最近都很少上UDN,方便的話請email給我:
way_kkiimmoo@yahoo.com.tw
ThisIsTheWay 於 2011/06/21 11:17回覆 - 2樓. K2010/07/06 14:48感謝大大~
大大您好,感謝您的教學,不好意思冒昧請問對於Outlook 2007以及Outlook XP 是否也是一樣的處理方式呢^^" 如有打擾請多見諒~Outlook 2007 好像沒有這種問題,所以也就沒必要用這個巨集程式。 ThisIsTheWay 於 2011/06/21 11:13回覆 - 1樓. the dreamer girl2009/06/10 14:50嗯,謝謝你提醒了我,趕快加了一張圖片,讓平時少用 Outlook 的人也知道什麼是 "讀取窗格"。其實,對常用Outlook的人而言,這樣的需求也不多見,但唯有寫個VBA程式才能解決。把它貼出來,是為了讓有這種特殊需求的人能在此找到解決,希望如此吧!
ThisIsTheWay 於 2009/06/10 15:19回覆