【发布时间】:2019-09-08 23:58:38
【问题描述】:
第 1 步: 我想创建一个文件夹,如果它失败(因为它可能已经存在),我希望它忽略并继续:
Sub MakeFolder()
'declare variables
Dim outlookApp As Outlook.Application
Dim NS As Outlook.NameSpace
'set up folder objects
Set outlookApp = New Outlook.Application
Set outlookApp = New Outlook.Application
Set NS = outlookApp.GetNamespace("MAPI")
Set objOwner = NS.CreateRecipient("email@host.com")
objOwner.Resolve
Set outlookInbox = NS.GetSharedDefaultFolder(objOwner, olFolderInbox)
'make a folder, maybe
Dim newFolder
On Error Resume Next
Set newFolder = outlookInbox.Folders.Add("myNewFolder")
On Error GoTo -1
On Error GoTo 0
End Sub
但我仍然收到错误:
我怎样才能得到这个runnign?如果该文件夹不存在,它会顺利运行并创建它。
第二步: 我有一个可能随时间变化的文件夹列表(大约 60 个)。因此,我想运行一个脚本检查新文件夹,然后创建它们:
For Each fol In folders
On Error Resume Next
Set newFolder = outlookInbox.Folders.Add(fol)
If Err.Number <> 0 Then
On Error GoTo -1
Else:
Debug.Print fol & " created "
End If
On Error GoTo 0
Next ID
同样,outlookInbox.Folders.Add() 如果无法创建该文件夹,则无论下一个返回如何,都会引发错误。我该怎么办?
编辑
[解决方法见第一条评论]
【问题讨论】:
-
在 IDE 中,转到 Tools>Options>General 并确保在 Error Trapping 块下您没有将其设置为“Break on All Errors”。
-
你正在写 Resume Next 或 GoTo 0 但我没有看到任何 Next 或 0....
-
@IRENEG
On Error Resume Next不需要在For...Next循环内。这是告诉 VBA 吞下发生的任何错误的正常方式。同样,GoTo 0是告诉 VBA 恢复正常错误处理的正常方式,不需要标签 0。 -
@David Zemens 成功了。我真的被这个“IDE”打败了我现在记得设置这个选项是为了在出现错误的情况下获得“调试”按钮......
-
哈哈,是的,我以前去过那里,您很少需要从“中断未处理的错误”之外的任何内容中切换它。基本上,如果错误被
On Error...语句捕获,您(通常)不希望您的代码抛出调试对话框(如果您需要调试/检查某些东西,您可以添加一个 MsgBox 调用或断点,请务必在分发给其他人之前删除..
标签: vba error-handling outlook directory