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

a.t*_*.t. 5 methods vba properties object excel-vba

是否可以检查对象是否支持某种方法而在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
Run Code Online (Sandbox Code Playgroud)

Mat*_*don 5

无需查看正在使用的API的文档,就可以了。

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

Option Explicit

Public Sub Test(ByVal o As Object)
    Debug.Print o.FooBarBazz
End Sub
Run Code Online (Sandbox Code Playgroud)

或者说这更现实一些:

Debug.Print ThisWorkbook.Worksheets("Test").Naame 'Worksheets.Item returns an Object
Run Code Online (Sandbox Code Playgroud)

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

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

当然,它不是那么简单,因为即使是早绑定的接口也可以有一个COM标志,表明它们是“可扩展的”。Excel.Application是这样的接口之一:

Debug.Print Excel.Application.FooBarBazz ' compiles!
Run Code Online (Sandbox Code Playgroud)

但是我在漂移。

您说“没有错误处理” ...这算吗?

On Error Resume Next
item.sendkeys "{ENTER}"
'If Err.Number = 438 Then Debug.Print "Not supported!"
On Error GoTo 0
Run Code Online (Sandbox Code Playgroud)