如何使用VBA枚举Web表单对象的属性/方法/事件

时间:2010-11-22 16:39:28

标签: vba automation javascript-objects

我很擅长使用VBA进行开发(使用电锯切断公司繁文缛节),并且已经熟练地使用各种附加引用(IE,Excel,Outlook和Word自动化对象,IE浏览器)来扩展这些宏。是我最好的'技巧')。

无论如何,我很好奇如何在网页上获得给定对象的OOP'内容列表,因为我的IDE无法提供任何提示。

以下是一些示例代码,请确保引用了shdocvw.dll,并假设“www.mywebsite.com”有一个用户名和密码文本框以及一个登录按钮:

Sub MyIEAutomationExample
    Dim IE as InternetExplorer
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Navigate ("http://www.mywebsite.com")

    Do Until IE.ReadyState = READYSTATE_COMPLETE 'Delay for loading page
    Loop

    IE.Document.all.Item("tbxUserName").Value = "Nxwtypx"
    IE.Document.all.Item("tbxPassword").Value = InputBox("Please enter your password.")
    IE.Document.all.Item("btnLogin").Click
End Sub

我想到的问题是,如果我想确定tbxUserName,tbxPassword或btnLogin的其他属性/方法/事件,该怎么办?是否有某种参考可用于标准物体?

即便如此,就像我所知道的那样,内部开发的像Rich Text Boxes这样的变形物体呢?

2 个答案:

答案 0 :(得分:1)

如果它是您正在查看的标准HTML页面,则document对象的InternetExplorer属性应返回HTMLDocument对象。如果添加对“Microsoft HTML Object Library”的引用,则可以看到HTMLDocument的对象模型。

可以在“HTML”+元素名称+“元素”下找到各个HTML元素的详细信息。例如,button

下可找到HTMLButtonElement元素的详细信息

我不确定你能找到什么非标准物品。 Remou建议添加手表可能是最好的选择。然后,您可以使用“监视”窗口找到与非标准对象相对应的节点,并查看它公开的属性(如果有)。

最后,如果您正在查看的文档是XHTML或XML格式,那么您可能希望使用XMLHttpRequest(而不是InternetExplorer),因为这可以让您使用更强大的名为XPath的语言来定位您要检查的节点 - 有关详细信息,请参阅this answer to a different question

答案 1 :(得分:1)

除了我经常使用TypeName函数之外,我几乎没有想到立即添加到已经给出的答案中。

typename(myVariableOfInterest)

Typename

  

返回一个String,它提供有关变量的信息。

例如,在处理网页时,我可能会写:

Dim a As Object: Set a = .document.getElementById("elementID")

然后在即时窗口中执行

TypeName(a)

通常告诉我我正在使用的数据类型,例如HTMLTable

我接受返回的字符串,然后按顺序排列:

  1. Google查找列出的方法/属性
  2. MSDN Developer search查找列出的方法/属性
  3. 使用Excel中的对象浏览器搜索字符串和列出的方法/属性