Excel VBA宏也能汇出汇入,轻松备份共享,完整说明VBA网络爬虫程式
网志图文版:
https://www.b88104069.com/archives/4467
Excel VBA程式都是写在类似Word的模组白板里,可以像上方功能区一样汇入汇出,借此
实现备份及共享。本文同时详述QueryTables指令,作为介绍VBA网络爬虫实务的基础。
第一章介绍Excel专用加载网页内容的命令,虽然很方便,但如果是需要大量持续地取得
相关网页资料、进一步整理分析的场合,显然一次又一次的单独操不是很有效率。第一章
最后一节分享以VBA程式码方式一键取得网页资料,本章即以此为基础,进一步说明如何
适当应用Excel的VBA,取得个人所需的网页资料。这一节首先介绍程式如何汇出汇入,因
应不同需要作复制及延伸:
一、在VBA编辑环境中,程式码是存在“模组”这个地方,以上一节为例,在右边的“
Module1”鼠标右键,“汇出档案”。
二、在“汇出档案”视窗中,输入希望的档案名称,选择一个适当的资料夹,注意到“存
档类型”是“Basic档案(*.bas)”,表示这是VBA程式码,最后按“存盘”。
三、在新增的Excel档案中,上方功能区移到“开发人员”页签,在“程式码”中选择“
Visual Basic”:“开启Visual Basic编辑器”。
四、“档案”、“汇入档案”。
五、“开启”第二个步骤所储存的程式码档案。
六、“专案-VBAProject”多了一个模组资料夹,里面的“Module1”便是上一节编辑好的
程式码。
七、由于这是VBA取得网页资料的重要程式,完整解释程式码如下:
Sub DownloadWeb()
建立一个VBA宏程序,名称为“DownloadWeb”。
Application.CutCopyMode = False
清空剪贴簿。
With ActiveSheet.QueryTables.Add _
With……End With是一组固定用法,方便设置同一对象的各种属性,中间例如“.Name =
"index"”表示将这对象的“Name”属性设置为“index”,“QueryTables.Add”是VBA取
得外部资料来源的命令,“ActiveSheet.QueryTables.Add”表示将取得的外部资料建立
在目前工作表,“ _”空一格再紧接着下横线是VBA惯用符号,将过长的程式码换行。
(Connection:="URL;https://money.udn.com/money/index", _
外部资料来源的路径,可以是数据库或者文字档,这里是引用网页内容,所以是想要取得
资料的网址,“ _”同样是换行符号。
Destination:=Range("$A$1"))
所取得外部资料的目的地,熟悉枢纽分析表的读者,对于这里的路径和目的地应该觉得很
类似。
'.CommandType = 0
因为录制宏所产生的不必要参数,如上一章最后一节所述,前面加一个单引号“'”,
已经转换成单纯文字,其实也可以直接删除。
.Name = "index"
设置这个外部资料的名称。
.FieldNames = True
“True”代表所取得外部份资料有标题栏。
.RowNumbers = False
是否将列号指定为新增资料表的第一栏,比较不适用于取得网页数据库,设置为“False
”。
.FillAdjacentFormulas = False
是否于重新整理时更新资料表右边的公式,比较不适用于取得网页数据库,设置为“
False”。
.PreserveFormatting = True
是否保留格式,通常设置为“True”。
.RefreshOnFileOpen = False
开启档案时是否更新,“False”代表不自动更新。
.BackgroundQuery = True
是否于后台背景中执行,设置为“True”代表Excel在取得资料同时,可以进行其他操作
。
.RefreshStyle = xlInsertDeleteCells
取得资料时对于原工作表的插入或删除方式,以便写入外部资料,通常会在空白工作表汇
入,所以保留预置值即可。
.SavePassword = False
是否储存密码,比较不适用于取得网页资料,通常设置为“False”。
.SaveData = True
是否储存所取得资料,通常设置为“True”。
.AdjustColumnWidth = True
是否自动调整栏寛,通常设置为“True”。
.RefreshPeriod = 0
设定重新整理间的分钟数,“0”代表不会自动更新。
.WebSelectionType = xlEntirePage
取得网页内容的型态,通常设置为“xlEntirePage”,代表取得整个网页资料。
.WebFormatting = xlWebFormattingNone
是否沿用网页格式,通常设置为“xlWebFormattingNone”,代表只汇入资料,不汇入格
式。
.WebPreFormattedTextToColumns = True
是否同时汇入网页中HTML资料剖析栏的标签,通常设置为“True”。
.WebConsecutiveDelimitersAsOne = True
连续分隔符号是否视为单一的分隔字符,通常设置为“True”,有操作过Excel资料剖析
的读者,应该都能理解上面这两个参数的意义。
.WebSingleBlockTextImport = False
网页中HTML的<PRE>标签是否一次性汇入,通常设置为“False”。
.WebDisableDateRecognition = False
是否停用汇入资料的日期格式辩识,通常设置为“False”,表示辩识日期。
.WebDisableRedirections = False
网页查询时是否重新导向时是否停用,通常设置为“False”。
.Refresh BackgroundQuery:=False
与数据库建立连线之后,送出查询执行后是否于背景更新,比较不适用于取得网页资料,
通常设置为“False”。
End With
结束前面以“With”开始,一连串对于参数的属性设置,经过这么多的程式说明之后,应
该能理解为何要用With……End With简化程式码编写。
End Sub
(“DownloadWeb”)程序结束。
虽然这么多行的程式码,经过每一行简短说明之后,其实还是回归到最主要“
ActiveSheet.QueryTables.Add”,这是VBA取得外部来源资料的主要命令,也是Excel汇
入网页资料的关键方法。熟悉Excel枢纽分析表操作的读者,都知道建立枢纽分析表有两
大参数,其一是资料来源范围,其二是产生报表的位置,同样道理套在取得网页资料,
VBA“ActiveSheet.QueryTables.Add”最主要也是两大参数,以Excel说明手册的术语来
说,其一是“查询表的资料来源”(Connection),其二是“位于查询表目的范围的左上
角的储存格”(Destination)。其他杂七杂八的属性,如果没有衍生问题,毋须特别花
费时间研究,例如将会造成程式错误的“CommandType = 0”直接删掉即可。
延伸阅读:
Excel宏抓取网页资料出错了!进入VBA简单修改,开始成为程式设计师
https://www.b88104069.com/archives/4432
打开Excel开发人员面板,录制宏维护快速键,开始VBA程式抓网页资料
https://www.b88104069.com/archives/4425
Indirect、Match、Row这三个Excel函数组合,竟然足以搜寻任何关键字重组报表
https://www.b88104069.com/archives/4411