Speed First'S VBA教程 原版载于http:/speedfirst.mysmth.net peedfirst speedfirst@sina.com 2008-12-4
序言 speedfirst speedfirst@sina.com 2008-12-4 原版载于 http://speedfirst.mysmth.net
目录 0.序言 1.基本编程元素 6 2.对象… 开始编写完整的程序 4.操作文件 5.事件 6.用户窗体… 38 7.根据VBA制作展示PPT… 8.提取Word中未样式化的标题 51 9.操作数据库 10.操作 Windows ap
目录 目录 0. 序言................................................................................................................................... 1 1. 基本编程元素................................................................................................................... 6 2. 对象................................................................................................................................. 12 3. 开始编写完整的程序..................................................................................................... 19 4. 操作文件......................................................................................................................... 24 5. 事件................................................................................................................................. 34 6. 用户窗体......................................................................................................................... 38 7. 根据 VBA 制作展示 PPT ................................................................................................. 42 8. 提取 Word 中未样式化的标题...................................................................................... 51 9. 操作数据库..................................................................................................................... 55 10. 操作 Windows API ....................................................................................................... 61
0序言 某圣贤说过,人和动物的最大之不同在于人知道怎么利用工具。VBA就是一种工 具,一种可以创造工具的工具。VBA提供了给你充分的自由,做几乎任何其他编 程语言或者环境能做的事情,避免重复的手动劳动。当然,有太多人对编程充满 了敬畏,认为编程是类似周小川做金融决策,或者爱因斯坦在思考问题那样很玄 幻、难以理解的事情,更不用说运用了。但其实,这更多的是误解(我觉得这些 误解源自于国内的编程教科书上那些髙深莫测的概念和诘屈聱牙的讲解)。事实 上,20多年来编程正朝着越来越人性化,越来越容易学的方向发展。VBA,确切 的说是VB(我在下面会解释这个微妙的差别)是众多语言中最容易学的,正如 其名字一样,又” Visua1”,又” Basic”。所以大可不必担心诸如“我没有编 程基础”之类的心理障碍 VBA的全称是 Visual Basic for Applications的简称。其意思是开发环境被整 合到了某个应用程序的 Visual basic语言。在本教程中特指整合在 MS Office 中的VBA。(其余的还有比如 VBA for Autocad, VBa for Coreldraw)我简单的 将一门编程语言分为两个大的部分,第一部分是其语法。语法规定了编程指令执 行的顺序和内存的使用方式。尽管如此,语法本身不能解决任何实际的问题,这 就好比你知道了英语语法,但是不懂单词和短语,就不能正确沟通一样;另一个 部分我称之为“库”,就是其他人写好了的,可以完成一定功能的东西。你可以 调用库的某一个部分来完成自己想做的事情。语法和库在一起合作,最终可以完 成复杂的任务。对于BA来讲,使用的是ⅦB的语法(确切的说是VB6的语法, 与目前的B.Net完全不同,如果你不知道我在说什么,那么就忽略这句话好了), 采用的是COM组件这种库,库的功能是让你能操作 Office的各种功能(VB也包 含一个基本的库,以完成一些常见的操作,比如访问文件,字符串操作,数学运 算等。这个库的形式是Func和Sub,而不是COM)。比如代码 For i= 1 To 100 ActiveWindow. Captain =i Next 完成的工作是让当前 Office组件的窗口标题在一瞬间从1变成2,3,…,100 F0R…NXT是B规定的语法,用于循环。这些词语被称为“关键字”,你不能 将关键字用于其他用途。而 ActiveWindow是指当前活动的 Windows窗口, Captain 指窗口标题,这些就是提供0 Efice功能的COM组件。关于COM组件到底是怎么 工作的我会在第1章进行更详细的介绍。你可以类似的写出如下的代码: sum =0 Fori=1 To 100 sum sum + l Next
序言 1 0. 序言 某圣贤说过,人和动物的最大之不同在于人知道怎么利用工具。VBA 就是一种工 具,一种可以创造工具的工具。VBA 提供了给你充分的自由,做几乎任何其他编 程语言或者环境能做的事情,避免重复的手动劳动。当然,有太多人对编程充满 了敬畏,认为编程是类似周小川做金融决策,或者爱因斯坦在思考问题那样很玄 幻、难以理解的事情,更不用说运用了。但其实,这更多的是误解(我觉得这些 误解源自于国内的编程教科书上那些高深莫测的概念和诘屈聱牙的讲解)。事实 上,20 多年来编程正朝着越来越人性化,越来越容易学的方向发展。VBA,确切 的说是 VB(我在下面会解释这个微妙的差别)是众多语言中最容易学的,正如 其名字一样,又”Visual”,又”Basic”。所以大可不必担心诸如“我没有编 程基础”之类的心理障碍。 VBA 的全称是 Visual Basic for Applications 的简称。其意思是开发环境被整 合到了某个应用程序的 Visual Basic 语言。在本教程中特指整合在 MS Office 中的 VBA。(其余的还有比如 VBA for AutoCAD, VBA for CorelDraw)我简单的 将一门编程语言分为两个大的部分,第一部分是其语法。语法规定了编程指令执 行的顺序和内存的使用方式。尽管如此,语法本身不能解决任何实际的问题,这 就好比你知道了英语语法,但是不懂单词和短语,就不能正确沟通一样;另一个 部分我称之为“库”,就是其他人写好了的,可以完成一定功能的东西。你可以 调用库的某一个部分来完成自己想做的事情。语法和库在一起合作,最终可以完 成复杂的任务。对于 VBA 来讲,使用的是 VB 的语法(确切的说是 VB6 的语法, 与目前的 VB.Net 完全不同,如果你不知道我在说什么,那么就忽略这句话好了), 采用的是 COM 组件这种库,库的功能是让你能操作 Office 的各种功能(VB 也包 含一个基本的库,以完成一些常见的操作,比如访问文件,字符串操作,数学运 算等。这个库的形式是 Func 和 Sub,而不是 COM)。比如代码: For i = 1 To 100 ActiveWindow.Captain = i Next 完成的工作是让当前 Office 组件的窗口标题在一瞬间从 1 变成 2,3,…,100。 FOR…NEXT 是 VB 规定的语法,用于循环。这些词语被称为“关键字”,你不能 将关键字用于其他用途。而ActiveWindow是指当前活动的Windows窗口,Captain 指窗口标题,这些就是提供 Office 功能的 COM 组件。关于 COM 组件到底是怎么 工作的我会在第 1 章进行更详细的介绍。你可以类似的写出如下的代码: sum = 0 For i = 1 To 100 sum = sum + i Next
就变成了求1+2+3+…+100的和。而: For i= 1 To 100 MsgBox Next 可以显示100次对话框,依次显示1,2,…,100。可见语法并不关心你到底用了 哪些库在做什么,而仅仅是完成其任务而已(在这里是循环)。在今后的教程中, 我会将重点放在介绍 Office库提供的各种功能上,而不会花很多时间介绍语法。 仅仅是在第一次用某种语法举例子时,我会说明一下。很快你就会发现这是很简 单的一件事情。 在正式介绍编程之间,我简单说一下VBA的开发环境,也就是你写代码的地方 如果你用的是 Office2003,在“工具”菜单找“宏”,在其子菜单中找” Visual Basic”,就可以打开一个新的窗口。如果是在 Office2007中,若你没看到“开 发工具”选项卡的话,先到选项中打开它。 第用 更改Exce中最常用的选项 公式 校对 使用 Excel时釆用的首选顶 保存 回选择时显示浮动工具栏M 回定用实时预览()① 是义 在功能区显示开发工具”选项卡 回总是使用 clearType 信任中心 些色方案Q 色 然后在“开发工具”选项卡的“代码”区域里按” Visual basic”按键,就可以 打开同样的界面。(我用Exce1举例)
序言 2 就变成了求 1+2+3+…+100 的和。而: For i = 1 To 100 MsgBox i Next 可以显示 100 次对话框,依次显示 1,2,…,100。可见语法并不关心你到底用了 哪些库在做什么,而仅仅是完成其任务而已(在这里是循环)。在今后的教程中, 我会将重点放在介绍 Office 库提供的各种功能上,而不会花很多时间介绍语法。 仅仅是在第一次用某种语法举例子时,我会说明一下。很快你就会发现这是很简 单的一件事情。 在正式介绍编程之间,我简单说一下 VBA 的开发环境,也就是你写代码的地方。 如果你用的是 Office 2003,在“工具”菜单找“宏”,在其子菜单中找”Visual Basic”,就可以打开一个新的窗口。如果是在 Office 2007 中,若你没看到“开 发工具”选项卡的话,先到选项中打开它。 然后在“开发工具”选项卡的“代码”区域里按”Visual Basic”按键,就可以 打开同样的界面。(我用 Excel 举例)
icrosoft Visual basic-Book1[模块1(代码) 旧区 件(编(视图(插入①格式(Q)调试()运行)工具①外接程序(A)口M帮助山H 国回·当边遇cP目a题图c 工- PrOiect Sub test o ox Hello. VBA VBAProjeet BookI A ③ Wi crosoft Exe1 山。h 表达式类型上下文 andardhi dth 8.38 visible -1-x1Sheetv 2003和2007的界面完全一样。因为 Office2007添加了若干新的功能,所以只 有库比起2003来多了些东西,表面上看不出来。在“工程”视图中,右键单 击” This Workbook”,然后在菜单中选“插入”-〉“模块”,就会在主界面出现 片空白。键入我在图中写的代码 Sub testo MsgBox "Hello, VBA End Sub 然后点击上面的绿色箭头,就可以运行它了。看看出了什么?:)这就是你的第 个VBA程序了。记住这个写代码的过程,以后我们会反复用到它。并且我不会 再重复。如果你有兴趣,在桌面上新建一个文本文件,将 MsgBox" Hello,VBA 这句放到里面(不要第一句和第三句),然后保存为test.vbs。(注意不是 test.vbs.txt,一定要把默认的扩展名去掉)然后双击这个文件,你又看到了什 么?(如果有杀毒软件或者防火墙问你是否执行脚本,请确认允许。这段代码不 会带来任何伤害)。 以下是对一些常见问题的回答 1.宏和VBA是什么关系?广义上来讲,宏就是VBA。我说“一段宏代码”和 段VBA代码”是等价的。 Office的自动录制功能可以帮你录制一个 宏,实际上就是把你的动作用ⅤBA代码的形式记录下来。狭义上,宏是指 个无参数的非 Private的Sub(我会在后边解释什么是Sub),如果手 写代码的话,只有这种Sub才会出现在“宏”那个对话框的列表里
序言 3 2003 和 2007 的界面完全一样。因为 Office2007 添加了若干新的功能,所以只 有库比起 2003 来多了些东西,表面上看不出来。 在“工程”视图中,右键单 击”ThisWorkbook”,然后 在菜单中选“插入”->“模块”,就会在主界面出现 一片空白。键入我在图中写的代码: Sub test() MsgBox "Hello, VBA" End Sub 然后点击上面的绿色箭头,就可以运行它了。看看出了什么?:)这就是你的第 一个 VBA 程序了。记住这个写代码的过程,以后我们会反复用到它。并且我不会 再重复。如果你有兴趣,在桌面上新建一个文本文件,将 MsgBox "Hello, VBA" 这句放到里面(不要第一句和第三句),然后保存为 test.vbs。(注意不是 test.vbs.txt,一定要把默认的扩展名去掉)然后双击这个文件,你又看到了什 么?(如果有杀毒软件或者防火墙问你是否执行脚本,请确认允许。这段代码不 会带来任何伤害)。 以下是对一些常见问题的回答: 1. 宏和 VBA 是什么关系?广义上来讲,宏就是 VBA。我说“一段宏代码”和 “一段 VBA 代码”是等价的。Office 的自动录制功能可以帮你录制一个 宏,实际上就是把你的动作用 VBA 代码的形式记录下来。狭义上,宏是指 一个无参数的非 Private 的 Sub(我会在后边解释什么是 Sub),如果手 写代码的话,只有这种 Sub 才会出现在“宏”那个对话框的列表里