a.t*_*.t. 5 methods vba properties object excel-vba
是否可以检查对象是否支持某种方法而在VBA中没有错误处理程序?
我发现了很多重复的问题,例如JavaScript和Symphony2,但在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)
无需查看正在使用的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)