我想制作可以搜索和列出命中電子郵件資訊的 VBA 腳本。我在中途發現我的腳本只搜索本地復制資料而不是在線原始資料。因此,搜索結果顯然僅限于最近的通信。我非常感謝可以幫助解決它以徹底搜索在線資料的人的建議。
我的腳本如下所示。
Set objOutlook = Outlook.Application
Set objOutlookAcct = objOutlook.Session.Accounts(TargetAccount)
Set objOutlookStore = objOutlookAcct.DeliveryStore
Set MyInbox = objOutlookStore.GetDefaultFolder(olFolderInbox)
Set MyItems = MyInbox.Items
MyItems 是搜索的主題群體,僅包括復制的本地資料。
uj5u.com熱心網友回復:
在 Outlook 物件模型中您無法解決此問題 - 您可以將同步選項更改為“所有專案”而不是時間范圍,或者您必須切換到擴展 MAPI(僅限 C 或 Delphi)或贖回(任何包括VBA的語言)在搜索之前以在線模式打開檔案夾(但當然會慢一些):
MAPI_NO_CACHE = &H0200
MAPI_BEST_ACCESS = &H0010
set OomFolder = Application.ActiveExplorer.CurrentFolder
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set RdoFolder = Session.GetFolderFromID(MyInbox.EntryID, , MAPI_NO_CACHE Or MAPI_BEST_ACCESS)
MsgBox "Number of items in the online folder: " & RdoFolder.Items.Count
uj5u.com熱心網友回復:
Outlook 物件模型不提供任何用于在線搜索專案(在服務器上)。相反,您可以將 Outlook 中的本地資料與服務器同步,然后搜索更新/接收的資料。代表用戶的 Send\Receive 組的SyncObject類。該SyncObject.Start方法開始使用指定的發送\接收組同步一個用戶的檔案夾。例如:
Public Sub Sync()
Dim nsp As Outlook.NameSpace
Dim sycs As Outlook.SyncObjects
Dim syc As Outlook.SyncObject
Dim i As Integer
Dim strPrompt As Integer
Set nsp = Application.GetNamespace("MAPI")
Set sycs = nsp.SyncObjects
For i = 1 To sycs.Count
Set syc = sycs.Item(i)
strPrompt = MsgBox( _
"Do you wish to synchronize " & syc.Name &"?", vbYesNo)
If strPrompt = vbYes Then
syc.Start
End If
Next
End Sub
該SyncObject.SyncEnd事件的Microsoft Outlook同步完成使用指定的發送用戶的檔案夾后,立即解雇/接收組。
Dim WithEvents mySync As Outlook.SyncObject
Sub Initialize_handler()
Set mySync = Application.Session.SyncObjects.Item(1)
mySync.Start
End Sub
Private Sub mySync_SyncEnd()
MsgBox "Synchronization is complete."
End Sub
您還可以考慮使用 Outlook 所基于的低級 API - Extended MAPI 或圍繞該 API 的任何第三方包裝器,例如 Redemption。在處理擴展 MAPI 時,它大大簡化了您的生活。在這種情況下,您可以指出您想要獲得哪些資料訪問權限(請參閱 Dmitry 對您的回復)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407957.html
標籤:
上一篇:VBA,按日期過濾,如何停止excel將日期轉換為數字?
下一篇:ExcelVBA-匯出為CSV
