我正在尝试使用AddStore
在Outlook中添加新的pst,然后检查新添加的pst是否具有与默认pst相同的文件夹和子文件夹,否则它将创建文件夹然后执行其他命令
这里我包含了部分代码,其中应该完成循环和创建,但我在行"Cannot Create Folder"
newDestFolder = destFolderRoot.Folders.Add(sourceFolder.Name)
如何检查新pst中是否存在文件夹并进行相应创建,这也适用于子文件夹。
# 的($除外).StackTrace
at Microsoft.Office.Interop.Outlook._Folders.Add(String Name, Object Type)
at AutoBackup.ThisAddIn.SetSrcAndDst(String Src, String Dst)
in E:\projects\ThisAddIn.vb:line 76
# 代码部分
sFolders = oNspace.Folders.Item(src_pst).Folders
destFolderRoot = oNameSpace.Folders.Item(dst_pst)
destFolders = oNameSpace.Folders.Item(dst_pst).Folders
For Each sourceFolder In sourceFolders
For Each destFolder In destFolders
If sourceFolder.Name = destFolder.Name Then
'do something
Else
newDestFolder = destFolderRoot.Folders.Add(sourceFolder.Name)
End If
Next
Next
我尝试了另一种使用For Loop
检查它是否正常工作的方法(下面给出的代码),这次第二次pst中的非退出文件夹创建成功,但还有另一个问题:
通过第一次循环,它在第二个pst中创建了不存在的文件夹,但是在创建新文件夹之后,其余的循环没有检测到这种情况sFolders.Item(i).Name = dFolders.Item(i).Name
,而是将Deleted Items, Inbox, Sent
之类的默认文件夹返回到{ {1}}条件然后转向返回错误Else
,因为该文件夹已存在于第二个pst中,这就是我如何知道为什么我第一次使用"Cannot Create Folder"
循环收到错误因为条件不能正常工作并将现有文件夹返回到For Each
条件以创建为新文件夹。可能是专家可能有解决方案,但我似乎没有从谷歌搜索任何提示,我也不是很专家。
Else
答案 0 :(得分:0)
看来你的逻辑正在尝试创建源文件夹,在它存在后多次创建。
我不知道你使用的语言是什么,所以这里有一种快速而又脏的VBA方法来绕过错误。
For Each sourceFolder In sourceFolders
For Each destFolder In destFolders
If sourceFolder.Name = destFolder.Name Then
'do something
Else
' attempt to create all other folders than destfolder
' without checking if sourceFolder exists
' for a specific purpose
' - when folder already exists bypass the error line
on error resume next
newDestFolder = destFolderRoot.Folders.Add(sourceFolder.Name)
' turn bypass off
' return to normal error handling
on error goto 0
End If
Next
Next
为了提高效率,您可能希望移动添加逻辑,使其在循环遍历所有现有文件夹后运行,并确定第二个pst中不存在sourceFolder。