2011-05-28 33 views
1

美好的一天,所有。检查COM对象收集属性存在

我一直在琢磨这一段时间。我编程式(在VB6中)筛选Outlook PST,索引其中的项目。我遇到了一个有点损坏的地方,这是我遇到困难的地方。我的程序附加了PST并开始钻取文件夹(olFolder)。这些Outlook创建的对象应该有一个集合,通常会保存子文件夹(适当地命名为文件夹)。

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

UPDATE

表达:

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 

回答

1

如果你正在谈论核查是否obj.Coll.Count = 0,然后看是否obj.Coll Is Nothing

+0

嗯。我可以发誓我已经试过了,并且抛出了一个例外......好吧,非常感谢你的帮助。这是我在星期六早上工作时得到的...... – CodeWarrior 2011-05-28 13:53:13

+0

起初,它看起来像是有效的,但是显然我尝试过,并没有奏效。我会在上面的文章中添加更多的细节。 – CodeWarrior 2011-05-28 14:06:42

+0

虽然这不是我的答案,但我正在处理一个严重的PST文件,Outlook令人不安,这确实是我如果这是一个更“正常”的做法(是否有这样的发展中的事情?)的情况。 – CodeWarrior 2011-06-10 14:21:16

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