我使用以下函数来监视公共Outlook文件夹以便新电子邮件到达:
var goodRegionAndBuildings = _regionAndBuildings.filter(function(item) {
// assumes not-empty strings are good
// everything else is bad
return (
item.ModifiedOn !== "" &&
item.BuildingName !== "" &&
item.Latitude !== "" &&
item.Longitude !== "" &&
item.Region !== ""
);
});
由于某种原因,此公用文件夹的路径会在一周内随时间变化。 Public Sub Application_Startup()
Set NewMail = Application.GetNamespace("MAPI").Folders(3).Folders(2)....
End Sub
中的数字有哪些变化。它从1到3不等。
显然,为了保持函数正常工作并捕获错误,当路径发生变化时,我想实现一个try和catch函数,例如:
.Folders(3)
由于我是VBA的新手,因此我很难实现这个Try and Catch功能。任何人都可以在Outlook中协助VBA代码吗?
我认为我设法实现的一个解决方案是:
Try {
Set NewMail = Application.GetNamespace("MAPI").Folders(1).Folders(2)....
Catch Error
Try {
Set NewMail = Application.GetNamespace("MAPI").Folders(2).Folders(2)....
Catch Error
Try {
Set NewMail = Application.GetNamespace("MAPI").Folders(2).Folders(2)....
Catch Error
答案 0 :(得分:4)
VBA中的错误处理基于 On Error 语句。以下文章介绍了如何处理VBA中的错误:
Try / Catch块用于加载项。
注意,您可以使用NameSpace.GetDefaultFolder方法获取Exchange公用文件夹存储中的所有公用文件夹文件夹。您只需传递 olPublicFoldersAllPublicFolders 值即可。请参阅以下页面上的示例代码:
答案 1 :(得分:1)
您可以先通过检查文件夹集合的Count属性来避免错误,例如:
{{1}}
答案 2 :(得分:0)
VB(A)没有结构化错误处理,因此它没有try和catch语句。
如果您希望语句失败,On Error Resume Next
进行以下If Err.Number <> 0 Then ...
检查即可。最好将On Error Resume Next
涵盖的代码段保持在绝对最小值。您不希望默默地吞下意外的运行时错误,因为这会导致令人讨厌且难以发现的错误。
当然,以故障安全方式编写代码是另一种可能性。
按编号索引到文件夹集合并不是故障安全的,正如您所注意到的那样。通常应避免将数字索引到未知的项目集合中。幸运的是,Folders
集合允许按名称编制索引。 .Folders("Foo")
很多比.Folders(3)
更好。
当然可能没有名为"Foo"
的子文件夹,但可以通过On Error
处理。
以下是使用path
(反斜杠分隔,不包括\\Public Folders - mailbox name\All Public Folders\
部分)的替代方法:
Function GetPublicFolderByPath(path As String) As Folder
Dim parent As Folder, part As Variant
Set parent = GetNamespace("MAPI").GetDefaultFolder(olPublicFoldersAllPublicFolders)
For Each part In Split(path, "\")
On Error Resume Next
Set GetPublicFolderByPath = parent.Folders(part)
If Err.Number <> 0 Then
Set GetPublicFolderByPath = Nothing
Exit For
End If
On Error GoTo 0
Next part
End Function
像这样使用
Dim f As Folder
Set f = GetPublicFolderByPath("Folder A\Folder B\Folder C")
If f Is Nothing Then
' not found
Else
' use f
End If