Contents ...
udn網路城邦
[Outlook VBA] 快速的把讀取窗格全部關掉
2009/06/09 02:34
瀏覽6,344
迴響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


在 HideAllPreviewPanes() 裡,用迴圈重覆呼叫HideFolderPreviewPane(),分別處理收件匣、寄件匣、垃圾郵件這三個資料夾。你若讀過 把 email 附件檔全部存入一個資料夾 這篇文章,就知道 "olFolderInbox, olFolderOutbox, olFolderJunk" 這三個常數的意義。

在 HideFolderPreviewPane() 裡,先把指定的資料夾設為 Active (就是Current Folder),然後用 ShowPane 方法,把 "olPreview" 也就是指 "Preview Pane" 關掉。經實驗得證,這兩個動作之間必須延遲一下,才能得到預期效果。

因為資料夾可能有子資料夾,子資料夾又可能有孫資料夾,無法預期有幾層,所以我用 "遞迴呼叫 (Recursion Call)" 的做法寫 HideFolderPreviewPane() ,也就是如果有子資料夾, HideFolderPreviewPane() 就呼叫它自己來處理子資料夾。


※ 關於如何在 Outlook 裡執行巨集,請看這篇文章: 在 Outlook 裡使用巨集
有誰推薦more
迴響(3) :
3樓. ALEX
2011/06/16 11:49
使用有效性?

您好

感謝提供此一方式 但我執行巨集後直接跳到垃圾郵件夾且未全部關閉預覽耶!?

想請問有要修正哪裡嗎? 謝謝 

可以更詳細的描述你的執行環境嗎? 例如: Windows 版本, Office (Outlook) 版本... ...
因我最近都很少上UDN,方便的話請email給我:

way_kkiimmoo@yahoo.com.tw
ThisIsTheWay2011/06/21 11:17回覆
2樓. K
2010/07/06 14:48
感謝大大~
大大您好,感謝您的教學,不好意思冒昧請問對於Outlook 2007以及Outlook XP 是否也是一樣的處理方式呢^^" 如有打擾請多見諒~
Outlook 2007 好像沒有這種問題,所以也就沒必要用這個巨集程式。 ThisIsTheWay2011/06/21 11:13回覆
1樓. the dreamer girl
2009/06/10 14:50
高級班

這對我來說有點狀況外

因為我很少用到 outlook


the dreamer girl~~ 最新作品:



杜拜- 哈里發塔(Burj Khalifa)

嗯,謝謝你提醒了我,趕快加了一張圖片,讓平時少用 Outlook 的人也知道什麼是 "讀取窗格"。其實,對常用Outlook的人而言,這樣的需求也不多見,但唯有寫個VBA程式才能解決。把它貼出來,是為了讓有這種特殊需求的人能在此找到解決,希望如此吧!

ThisIsTheWay2009/06/10 15:19回覆
發表迴響

會員登入