检查通用对象的给定 ItemProperty 是否存在

Check existence of a given ItemProperty for a generic Object

我有一个 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

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

你可以试试这个,确实有点不雅。如果 属性 获取失败,那么它将标志设置为 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

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

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