检查通用Object的给定ItemProperty的存在性

时间:2015-03-23 10:41:09

标签: vba outlook outlook-vba

我有一个Sub,它将参数作为通用对象olObj。我想访问对象的给定属性,只有它存在。

我在下面写了Function来检查这个。 我也设想使用错误处理。 还有其他方式吗?(例如HasItemProperty之类的内容,不需要扫描所有ItemProperties并逐个检查。

    Function HasItemProperty(ByRef olObj As Object, ByVal ipname As String) As Boolean
        HasItemProperty = False
        Dim ips As ItemProperties
        Set ips = olObj.ItemProperties
        Dim iip As Integer
        For iip = 0 To ips.Count - 1
          Dim ip As ItemProperty
          Set ip = ips.Item(iip)
          Dim ipn As String
          ipn = ip.Name
          If (ipn = ipname) Then
            HasItemProperty = True
            Exit Function
          End If
        Next iip
    End Function

3 个答案:

答案 0 :(得分:1)

所以基本上你想检查你的对象是否公开了一个特定的属性,比如olObj.SomeProperty

不在VBA中。在低级别(C ++,Delphi等),您可以调用IDispatch::GetIDsOfNames。但为什么不简单地访问属性(olObj.SomeProperty)并处理异常(on Error Resume NextErr.Number / Err.Clea r)?

答案 1 :(得分:0)

你可以试试这个,它有点不优雅,这是肯定的。如果属性获取失败,那么它将标志设置为false并且以快乐的方式进行。

您可以切换testProperty

的评论
Sub marine()
Dim testObj As Object
Dim propertyValid As Boolean
Dim testProperty As String


On Error GoTo PROPERR
Set testObj = Sheets(1)
testProperty = testObj.Name
'testProperty = testObj.ThisDoesNotExist

propertyValid = True
PROPRETURN:
Exit Sub


PROPERR:
propertyValid = False
GoTo PROPRETURN
End Sub

答案 2 :(得分:-2)

Outlook对象模型不提供任何其他方式。您需要遍历集合中的所有属性以找到所需的属性。