当用户权限不足时,读取Outlook.MAPIFolder.Items集合的各种属性会导致错误,例如,如果文件夹可见但不可浏览。
错误说明是:您没有足够的权限对此对象执行此操作。请参阅文件夹联系人或您的系统管理员。
我想以这种方式捕获该错误(在Outlook 2003中):
Sub MySub(StartFolder As Outlook.MAPIFolder)
...
On Error GoTo ErrHandler
If (StartFolder.Items.Count = 0) Then Exit Sub 'this really is a permission test'
On Error GoTo 0
...
ErrHandler:
If ((Err.Number <> 0) And (Err.Number <> -2114519035)) Then
Call MsgBox("Error " & Err.Number & ": " & Err.Description, vbExclamation + vbOKOnly, StartFolder.Name, _
Err.HelpFile, Err.HelpContext)
...
End Sub
测试我的错误处理程序,我发现另一个错误号具有相同的描述......并且列表迅速增长到具有相同描述的62个错误! Err.Number的范围从-2114519035到-1638395。所有错误编号看起来都是十六进制的FFxxx70005。
为什么同一个Err.Description有多个Err.Number?你如何容易地捕获这些错误,只有它们?这个错误的十六进制错误号结构是否特征?
哦,我不喜欢测试描述的想法(太过语言环境和特定版本)。
答案 0 :(得分:0)
该错误编号看起来像HRESULT
- 请参阅HRESULT
on Wikipedia的页面。
对您而言,标记为xxx
的作品是“工具”,换句话说,Windows的哪一部分正在返回错误。
实际错误位于底部16位,或者在您的情况下为0x00005
,这意味着“访问被拒绝”。您看到的值是Windows可以说“访问被拒绝”的所有不同方式,例如。 “拒绝访问文件”,“拒绝访问证书存储”,“拒绝访问网络服务”等。
获取错误的最后16位并与5
进行比较,以捕获“用户权限不足”的所有情况。
答案 1 :(得分:0)
我相信这是因为请求的操作是复合的,也就是说,需要多次调用各种COM接口,每个接口都可以返回一个不同的HRESULT来描述在那个小步骤发生的错误。封闭方法尝试生成更加用户友好的消息,因此如果出现任何错误,它会发出相同的错误字符串(这通常是一件好事,可用性方面)。同时,保留原始COM错误代码以防有人关心。
我认为在这种情况下,您可以做的最好的事情就是做同样的事情,即为所有错误代码提供相同的用户友好字符串。
如果您确实想要分析错误代码,则需要Structure of COM Error Codes。