|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
Web查询可以直接将网页数据导入到Excel中进行处理,特别对于一些表格数据,例如股票等。需要注意的是,现在大多数网站广泛使用了Ajax技术来实现不刷屏更新数据,导致Web查询对这些使用了脚本的网站不起作用。
要使用Web查询,可以单击菜单“数据”->“导入外部数据”->“新建Web查询”,弹出“新建Web查询”窗口,在“地址”栏中输入网址,例如Yahoo!的股票历史数据:http://finance.cn.yahoo.com/q/hp?s=600177.SS,然后单击“跳至”按钮,将在网页显示网页内容,这时可以看到网页中出现一些黄色方框,在“新建Web查询”窗口的网页内容中单击单击“导入”,网页数据下载成功后,在数据区域任意单元格单击右键,在右键菜单中可以看到“编辑查询”和“刷新数据”两个菜单用来修改查询设置和刷新数据。
上面介绍了使用菜单创建Web查询的方法,在VBA中可以使用QueryTables集合的Add方法添加Web查询。QueryTables集合属于Worksheet对象,包含指定工作表的所有QueryTable对象。Add方法返回表示一个新的查询的QueryTable对象。语法如下:
expression.Add(Connection, Destination, Sql)
expression 必需。该表达式返回一个 QueryTables 对象。
Connection Variant 类型,必需。查询表的数据源。可为以下情形之一:
一个包含 OLE DB 或 ODBC 连接字符串的字符串。ODBC 连接字符串的形式为“ODBC;<连接字符串>”。
一个 QueryTable 对象,该对象表示查询信息的复制来源,包括连接字符串和 SQL 文本,但不包括 Destination 区域。如果指定 QueryTable 对象,则忽略 Sql 参数。
一个 ADO 或 DAO RecordSet 对象。可从 ADO 或 DAO 记录集中读取数据。Microsoft Excel 将记录集保留到删除该查询表或者 SQL 连接发生更改时为止。不能对查询结果表进行编辑。
一个 Web 查询,是“URL;”形式的字符串,其中“URL;”是必需的,但不进行本地化,字符串的其余部分作为 Web 查询的 URL。
数据查找程序。是“FINDER;<数据查找程序文件路径>”形式的字符串,其中“FINDER;”是必需的,但不进行本地化。字符串的其余部分为数据查找程序文件(*.dqy 或 *.iqy)的路径和名称。使用 Add 方法时将读取该文件;之后,对查询表的 Connection 属性的调用将返回以“ODBC;”或“URL;”开头的字符串,视具体的调用而定。
一个文本文件。是“TEXT;<文本文件路径和名称>”形式的字符串,其中 TEXT 是必需的,但不进行本地化。
Destination Range 类型,必需。查询表目标区域左上角单元格(放置生成的查询表的区域)。目标区域必须在包含 expression 指定的 QueryTables 对象的工作表上。
Sql Variant 类型,可选。在 ODBC 数据源上运行的 SQL 查询字符串。当使用的数据源为 ODBC 数据源时该参数可选(如果不在此处指定该参数,则应该在查询表刷新之前使用查询表的 Sql 属性进行设置)。当将 QueryTable 对象、文本文件、或是 ADO 或 DAO Recordset 对象指定为数据源时不能使用该参数。
从上面的语法你可以看出QueryTable的数据源不只是网页数据还可以包括数据库以及文本文件。
讲了这么多,我附个实例如下:
Sub 查询()
Range("$D$7").CurrentRegion.ClearContents
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://qingwen.xyz/weboa/result6 ... 1%E7%AE%97%E8%A1%A8" _
, Destination:=Range("$D$7"))
.PreserveFormatting = True '是否下载格式
.Refresh BackgroundQuery:=False '同步异步模式
End With
End Sub
实际中有时要下载的数据量很大5M以上,下载时间达一分多之久, 微软人性化的在自定义状态栏为我们的任务作了提示,如”正在连至WEB“,”正将WEB数据复制到工作表“,包括鼠标不停转圈直至数据下载完毕。微软是估算时间的吗?还是线程机制实时进度条,相关信息VBA能否捕捉,以便自制一个更人性的进度条以替代MS的状态栏提示。
其实大多数在做WEB office开发的都深知这点的重要性,对WEB office 来讲宏的安全度已经不重要,脚本语言执行的VBA尽管可以畅通无阻,却要付出丢失微软状态栏等提示信息的代价,签于AJAX方法的拙笨,打开页面机制的载体变化,更多的人选择 office 自带的VBA功能,但微软封装背后让我们无从知道其内在的机制,如果要花旷日持久的时间去揣摩无异慢性自杀。下附我的测试网站:利用WebQuery做的页面不刷新下载,另附 excel 代码见附件:
http://qingwen.xyz
UID:luqiwe
pwd:88888888
下载数据点”文档目录“ |
|