基于VBA for Excel批量下载图片教程系列(一)——前言
| 分类: EXCEL |
关于VBA
VBA是Visual Basic for Applications的简称,本质上是一种基于VB的自动化语言,主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。
虽然VBA继承自VB,但二者之间存在着以下差异:
-
VB主要用于创建标准的应用程序,而VBA是寄生于已有的应用程序,并使其自动化。
-
正如第一点区别所述,VB具有独立的开发环境,而VBA必须寄生于已有的应用程序。
-
VB开发的应用程序可以作为一个可执行程序独立的运行,不需要单独配置其运行环境;相反,VBA开发的程序必须依赖于其父应用程序,例如EXCEL、WORD、ACCESS甚至ArcGIS等集成VBA的应用程序。
-
VBA继承于VB,是VB的一个子集,因此,VBA也集成了VB的绝大多数函数和语法规则。
我对VBA的一些认识
我一直认为MS OFFICE是迄今为止世界上最强大的生产力工具,没有之一!同样地,我也认为MS EXCEL是MS OFFICE能最强大的工具,没有之一!
我的理由就是MS OFFICE集成了VBA,利用VBA可以极大提高OFFICE的效率;至于VBA for EXCEL,在已有的OFFICE软件套装中,这是世界上的独一份!
VBA可以做很多工作,受限于我的水平和使用经历,我认为包括但不限于以下方面:
- WORD批量化、自动化排版,例如大纲索引、段落缩进、字体设置等等,甚至在毕业论文的写作过程中,ENDNOTE的功能也可以使用VBA来替代!
- WORD自动化纠错;
当然,我更倾向于在EXCEL中使用VBA,在EXCEL中,VBA可以干太多的事情了:
-
EXCEL中几乎所有的函数均可以用VBA来实现;
-
VBA可以自定义EXCEL中不存在的函数和功能模块;
-
VBA可以自动化、批量化甚至定时获数据、处理数据、计算数据、输出结果,结果可以输出至简单的文本中,也可以输出至数据库中,亦可以通过VBA生成可视化的结果。
-
VBA获取数据来源包括但不限于:
-
本地数据:VBA可以索引本地所有目录,列出目录结构,获取特定类型文件的内容;
-
远程数据:VBA可以获取局域网和外网服务器上的数据,并与远程服务器进行连接和数据交互;
-
-
得益于VB的窗体模块,VBA可以开发出良好的交互式工具。
本文将以基于VBA for EXCEL的【图片批量下载工具】为例,由浅入深的讲解EXCEL中VBA的基本用法,当然我的水平相当有限,其中肯定有一些错误和缺点,请大家批评指正!
【批量下载工具】说明
我不会将VBA的基本用法作为这个教程系列的开始,我更喜欢以每一个【模块】为单元进行讲解。所以,我将【批量下载图片工具】分解为几个功能【模块】,每一个【模块】包含一个或多个【自定义函数】,每一个【模块】实现一个功能。
流程图
上面这张流程图基本上反映了该工具的工作原理和逻辑关系,该工具的使用方法如下图:
据此,我将该工具分解为如下几个模块:
功能模块
制作【交互式界面】
主要用于定义运行参数和填写原始的网页地址。
生成【目标网页地址数组】
获取用户在单元格中输入的网页地址链接,并将其存储在数组中,然后对该数组进行排序,最后删除其中的重复项,获得最终的【网页地址数组】。
生成【图片链接数组】和【网页
向服务器请求目标网页的源代码,获取网页为名称的文件夹中;通过一系列的规则,获取目标网页中的图片链接,并将其存放在数组中。
【目录索引模块】
查询根目录中是否存在文件夹;若存在,则询问是否重新下载。在这个过程中,程序将获取根目录下所有的文件夹以及文件的信息,包括文件/文件夹名称、路径、数量、类型等等。
【图片下载模块】
利用VBA的URLDownloadToFile函数批量下载图片,并将其保存在根目录的
创建【第三方下载工具批处理文件】(可选)
生成IDM批处理文件,利用IDM批处理功能,可以使用socks5代理更加快速、高效的下载图片,实际体验过程中,IDM的下载速度和容错率远远超过URLDownloadToFile函数。
创建【本地HTML文件】
将目标网页的源代码保存在本地,并自动链接本地相应的图片,可以在断网的情况下进行网页浏览,特别适合于目标网页中有重要文字信息的情景。
【结果输出、统计模块】
将以下信息追加保存在EXCEL的某一个Sheet中:
- 文件夹名称
- 标识码
- 创建时间
- IDM批处理路径,同时创建超链接
- 来源网址,同时创建超链接
- 图片数量
- 实际下载数量
- 保存目录,同时创建超链接
- 本地HTML网页,同时创建超链接
【文件管理模块】
-
整理全部功能:将根目录下所有的图片文件夹进行整理;
-
整理新增功能:只整理结果Sheet中没有显示的文件夹;
至于VBA的基本用法,如数据类型、变量定义、数组、常用语法、函数定义和调用等,我会在函数的定义中穿插讲解。
好了,本篇作为前言就讲这么多,从下一篇开始,将详细讲解如何一步步的搭建起这个工具。
最后,给出本文的材料:
最后给出本文的材料:

加载中…