检查通用对象的给定 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.Clea
r)?
我有一个 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.Clea
r)?