如何检查对象是否支持vba中的方法?

时间:2017-09-26 19:12:32

标签: vba excel-vba object methods properties

是否可以在VBA中检查对象是否支持某种方法而没有错误处理程序?

我发现有很多重复的问题,例如JavaScriptSymphony2,但还没有在VBA中。

我想对.sendkeys "{ENTER}"类项使用ie.document命令,并学习如何检查对象是否支持方法,从长远来看,我可以编写更干净的代码。

示例代码:

Set elements(17) = ie.document.getElementsByClassName("ng-binding ng-scope")
for each item in elements(17)
    item.sendkeys "{ENTER}"
next item

1 个答案:

答案 0 :(得分:5)

如果没有查看您正在使用的API的文档,则不能。

至少不是迟到的代码。根据定义,后期绑定代码在运行时被解析,这意味着您没有编译时验证成员是否可以在该对象的接口上使用 - 这就是此代码编译的原因:

Option Explicit

Public Sub Test(ByVal o As Object)
    Debug.Print o.FooBarBazz
End Sub

或者这个更现实的一个:

Debug.Print ThisWorkbook.Worksheets("Test").Naame 'Worksheets.Item returns an Object

在运行时之前知道是否支持成员的唯一方法是使用早期绑定调用:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Test")
Debug.Print ws.Naame ' typo won't compile!

当然 简单,因为即使是早期绑定的接口也可以有一个COM标志,说它们是“可扩展的”。 Excel.Application就是这样一个界面:

Debug.Print Excel.Application.FooBarBazz ' compiles!

但我正在漂流。

你说“没有错误处理”......这算不算了?

On Error Resume Next
item.sendkeys "{ENTER}"
'If Err.Number = 438 Then Debug.Print "Not supported!"
On Error GoTo 0