我有一个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
答案 0 :(得分:1)
所以基本上你想检查你的对象是否公开了一个特定的属性,比如olObj.SomeProperty
?
不在VBA中。在低级别(C ++,Delphi等),您可以调用IDispatch::GetIDsOfNames
。但为什么不简单地访问属性(olObj.SomeProperty
)并处理异常(on Error Resume Next
,Err.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对象模型不提供任何其他方式。您需要遍历集合中的所有属性以找到所需的属性。