SOLUTION低於外部應用程序:檢查是否Outlook文件夾存在
我一直在尋找所有網找到了一個解決方案,但它似乎很很難得到這個答案的德爾福...
跳過此,如果你熟悉的Outlook
一些解釋之前: Outlook中的聯繫人文件夾的組織像Windows中的foldertree。聯繫人存儲在聯繫人文件夾本身或子文件夾中。
我的代碼確實將外部數據庫中的聯繫人添加到Outlook聯繫人數據庫中。爲了防止重複輸入,程序應該檢查所有聯繫人並查看它是否可以找到聯繫人條目的「舊」版本並更新它,如果沒有,則創建一個新聯繫人條目。
因此我寫了一個循環遍歷文件夾並檢查聯繫人的遞歸。
中的文件夾,你可以得到的子文件夾(除了下一首,上和Last)
Contacts:= Contacts.Folders.Getfirst
//此刻的選擇文件夾內是先前選擇的一個
如果我是第一個子文件夾試圖獲取此子文件夾的任何屬性,如「Items.Count」或其他任何內容,都會發生錯誤,因爲此文件夾不存在。
因此,我想檢查文件夾是否存在,並跳過循環通過這個子文件夾,因爲否則循環會在這裏打破,程序停止。
跳過直到這裏如果你熟悉的Outlook運作
問題:
在調試該聯繫人/文件夾變量(一個OleVariant,指針現在選擇的文件夾)中包含類似值這:'$ 0074974C'。
如果沒有子文件夾,則此值返回'$ 00000000'。這似乎是一個指針。
我該如何檢查文件夾是否存在?
const
olFolderContacts = $0000000A;
var
outlook, NameSpace, Contact, ContactsRoot, Contacts: OleVariant;
begin
Outlook := CreateOleObject('Outlook.Application');
NameSpace := Outlook.GetNameSpace('MAPI');
ContactsRoot := NameSpace.GetDefaultFolder(olFolderContacts);
Contacts:= ContactsRoot;
//We're now in the Contacts Folder
Contacts:= Contacts.folders.getfirst;
//First Subfolder
什麼不工作: 檢查
聯繫人= '$ 00000000'(作爲字符串)
聯繫人= '$ 00000000'(作爲OleVariant)
VAR
VAL :TVarRec;
code:
val:=聯繫人;
串(Contacts.VWideChar)= '$ 00000000'
變種
vntNothing:OLEVariant;
code:
TVarData(vntNothing)。VType:= varDispatch;
TVarData(vntNothing).VDispatch:= Nil;
聯繫人= vntNothing
聯繫=未分配
...
...
在VBA這個問題有一個簡單的解決方案
如果聯繫人=無
但德爾福沒有'Nothing'...
想法?
爲什麼格式化字符串?如果可行,爲什麼不使用'Pointer(TVarData(Contacts).VDispatch)= nil'? – 2010-09-17 08:31:41
認爲它是我以前嘗試尋找解決方案的剩餘部分,您的解決方案稍微短一點,但也可以工作,謝謝:) – fps 2010-09-17 08:40:13