VBA IE对象的操作方法
VBA IE对象的操作方法
原文日期:2013-10-27 11:39:29
转载
标签
分类: 电子商务
IE和文档对象模型
在实际工作中,常常需要处理网站和网页相关的问题,比如如何下载网页数据、网页间的通信、网页控制等。对于使用 VB/VBA/脚本或其他支持自动化对象(AUTOMATION)的语言编程的开发者,掌握对象模型非常重要。通过 IE 的自动化对象(InternetExplorer.Application
)或 IE 控件(Microsoft Internet Controls),以及标准的文档对象模型(Document),可以将网页视为对象进行控制。
以下代码可在 VBA 环境下试验:
1 | Set ieA = CreateObject("InternetExplorer.Application") ' 创建对象 |
这段代码会创建一个 IE 应用程序对象,并打开一个空白网页。该网页独立于 VBA 应用程序(如 Word 或 Excel)之外。关闭网页需调用 ieA.Quit
,仅关闭 VBA 或 Set ieA = Nothing
并不会退出网页。
你也可以将 navigate
的参数替换为网站地址或本地文档路径。例如:
1 | ieA.navigate "C:\XXX.HTM" |
另一种方法是在 VB/VBA 的窗体或工作表上添加 Web Browser 控件。注意,Web 控件和独立 IE 程序并不完全相同,例如 Web 控件不能用 Quit
方法退出,IE 的 navigate
方法没有复杂的 POST 参数,但文档对象的引用方法基本一致。
如果访问已存在的网页(如 www.excelhome.net),由于可能存在异步延时,通常需要根据 ReadyState
状态判断网页是否加载完成:
1 | Sub LOADIE() |
若需访问 IE 应用程序对象的相关声明和事件,可引用 IE 控件(SHDOCVW.DLL,Microsoft Internet Control)。
文档对象模型的基本操作
通过 ieA
对象,可以操作 IE,也可以访问其属性。例如:
1 | Set doc = ieA.Document ' 获取网页文档对象 |
Document
是文档对象模型的基础。获取 Document
后,可以修改网页、读写内容或触发事件。每个 URL 对应一个 Document
,需确保 ReadyState
为 4 后再操作。
在 Document
下可获取 documentElement
和 body
两个节点:
1 | Set doc = ieA.Document |
常用属性:
对象.innerHTML
:对象内部的 HTML 文本对象.outerHTML
:对象的 HTML,包括自身标签对象.innerText
:对象内部的纯文本对象.outerText
:对象的文本,包括自身
抓取网页所有 HTML 内容:
1 | Set doc = ieA.Document |
类似 Excel 的对象模型:
1 | Set shDocX = Application.ActiveWorkbook.ActiveSheet |
节点与集合
网页中的每个标签节点下都有 ChildNodes
集合,包含直属子节点。例如:
1 | Set doc = ieA.Document |
注意:
- 集合从 0 开始计数
- 使用
Length
属性获取数量,而不是Count
除了 ChildNodes
,还有 All
集合,包含文档或节点下的所有元素:
1 | Set doc = ieA.Document |
通过 ID 获取节点:
1 | Set tag1 = doc.All.item("myTag").item(0) |
通过标签名获取集合:
1 | Set mydivs = doc.getElementsByName("div") |
FORMS 集合
大部分网页数据提交通过 FORM 标签。FORMS 集合可用于区分不同的 FORM 节点:
1 | Set myForms = doc.Forms ' 获取所有 FORM |
FORM 节点可通过 submit
方法提交数据:
1 | frmX.submit |
如需动态创建 FORM 和 INPUT 节点,可使用 createElement
和 appendChild
方法,这部分内容可后续补充。
本文到此结束,后续内容敬请期待。
- 标题: VBA IE对象的操作方法
- 作者: jicky huang
- 创建于 : 2019-04-15 21:24:38
- 更新于 : 2025-10-05 20:36:03
- 链接: https://www.hxfund.cn/2019/04/15/vba-ie对象的操作方法/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。