检查COM对象集合Propertys存在

时间:2011-05-28 13:15:17

标签: vb6 outlook nullreferenceexception

美好的一天,全部。

我一直在思考这个问题。我是以编程方式(在VB6中)筛选Outlook PST,索引其中的项目。我碰巧遇到了一个有点腐败的地方,这就是我遇到困难的地方。我的程序附加PST并开始向下钻取文件夹(olFolder)。这些Outlook创建的对象应该具有通常包含子文件夹(适当地命名为文件夹)的集合。

在执行我的代码期间,我递归调用进程文件夹函数来处理当前文件夹中的所有文件夹,但我有一个没有集合的文件夹。这会导致异常,因为我正在检查集合中的文件夹数量,并且无需检查。我理解如何检查对象的存在,但我很难检查是否存在集合和对象。有没有人遇到过这个?

更新

表达式:

If Not fl.Folders Is Nothing Then

最终也会抛出异常。我得到的例外情况如下:

Could not complete the operation because the service provider does not support it.

仅当尝试访问此损坏的文件夹时,该文件夹似乎具有FUBARed的文件夹集合属性。

FINAL Alrighty。在这种情况下,我只是要进行一些内联​​错误处理。

If Not Err.Number = -2147221246 Then
'Do the thing with the other thing
End If
Err.Clear

2 个答案:

答案 0 :(得分:1)

如果您正在讨论是否obj.Coll.Count = 0,请查看是否obj.Coll Is Nothing

答案 1 :(得分:0)

当我在vb6上工作web服务时,如果属性存在,我会检查一些情况。我用那种方法。

这很慢,但我希望能帮到你。

Public Function HasProperty(ByRef obj As Object, ByVal nameProperty As String) As Boolean

On Local Error GoTo hasProperty_Error

   Dim Result

   Result = CallByName(obj, nameProperty, VbGet)

  hasProperty = True
hasProperty_Done:
  Exit Function

hasProperty_Error:
    If Err.Number = 438 Then
      hasProperty = False
    End If

Resume hasProperty_Done

End Function