本文共 5133 字,大约阅读时间需要 17 分钟。
Ⅰ.内容提要
本书共27章及三个附录,大致分为三个部分。通过内容提要我们可以很清楚的看到VBA编程的关键是Excle对象模型。
部分 | 章节 | 内容 |
---|---|---|
Ⅰ | 第1章(基础知识) | 介绍了vba编程和excle对象模型的基础知识 ——介绍了VBA语言及其特征,阐明了集合、对象、属性、方法和事件的关系,并展示了如何通过对象模型将这些概念与Excle产生联系 |
Ⅱ | 第2—27章 (使用特定对象) | 1. 通过大量实例介绍了excle关键对象2.介绍了新的XML文件格式和RibbonX开发技术3.介绍了为提取各种格式的数据而访问外部数据库的详细技术4.最后四章探讨了将Excle链接到Internet、为国际兼容性编写代码、VBE编程及如何使用Win32API函数等高级话题 |
Ⅲ | 附录(对象模型参考) | 提供了Excle2007对象模型以及VBE和Office对象模型的所有对象,并包括相应的所有属性、方法和事件以及相关示例。 |
相关网站第V页
Ⅱ.第一章 Excle VBA基础
本章主要讲了如下内容一.Excle宏录制器二.用户自定义函数三.Excle对象模型四.VBA编程概念
一.Excle宏录制器
1.个人宏工作簿——如果选择在个人宏工作簿里存储录制的宏,那么该宏将被添加到名为 Personal.xlsb的特定文件中。该文件是当关闭 Excel时保存在 Excel启动目录里的一个隐藏文件,这意味着启动 Excel时会自动装载Personal.xlsb文件,因此,该文件中的宏总是可以为其他的工作簿使用
2.如果不同表存在相同快捷键的宏,按宏名的字母顺序优先运行
3.绝对录制与相对录制——绝对录制锁定你所录制的单元格,相对录制则你当前选中哪个单元格就从那里开始(相对录制时从左上角开始选择,从左到右,否则会出错。这是所有版本的Excle VBA中存在的问题)
4.Visual Basic编辑器(VBE)
相关概念 | 划分及解释 |
---|---|
代码模块(所有宏都驻留在代码模块里,每个模块可以包括许多宏) | 1.标准模块2.类模块 |
过程(VBA中,宏被称为过程) | 1.子过程——宏录制器只能生成子过程,以关键字Sub开始,End Sub结束2.函数过程 |
工程资源管理器 | 显示所有已打开的工程以及这些工程的组成要素 |
属性窗口 | 选中属性然后F1键可获取帮助 |
5.事件过程——事件过程是特别的宏过程,响应在Excel里发生的事件。
二.用户自定义函数(UDF)
VBA里使用excle函数————WorksheetFunction.函数名(可用Application代替WorksheetFunction
UDF不能做什么——不能改变工作表结构1.使用在工作表单元格中的UDF不允许改变工作表的结构,这就意味着UDF不能对任何其他的单元格返回其正在使用的值,也不能改变单元格的物理属性,例如字体颜色或背景图案.2.UDF无法执行诸如复制或移动工作表单元格这样的操作,也不能执行某些包含光标位置变化的动作,例如“编辑”→“查找”。3.一个UDF能够调用另一个函数过程,甚至是子过程,但是该过程与UDF所受到的限制相同,仍然不允许改变工作表的结构
三.Excel对象模型
对象模型——每个应用程序都有一组明确定义的对象,这些对象经由彼此的关系被组织在一起。这种结构被称作应用程序的对象模型。
Microsoft Office相关对象
Word | 涉及文档、段落和词 |
---|---|
Access | 数据库、记录词和字段 |
Excle | 涉及工作簿、工作表和单元格区域 |
相关概念
名称 | 概念或释义 | 使用格式 |
---|---|---|
集合 | 对象从属于集合,集合本身也是对象,该对象包含其他紧密相关的对象 | |
属性 | 属性是对象的自然特征,可以被度量或量化 | (不过我去掉提供给单元格一种数值格式之后也能显示) |
方法 | 是对象或在对象中可以执行的动作 | |
事件 | VBA里的一个重要概念是对象能够响应事件 |
四.VBA语言
本章介绍内容
- 在变量和数组里存储信息
- 在代码里做出判断
- 使用循环
- 基本的错误处理
1.基本的输入和输出——以MsgBox和InputBox函数为例
1.1MsgBox方括号里的参数是可选的,有两种办法指定参数
1.通过位置指定参数 | 通过位置指定一个参数,则需要保证按正确顺序输入,即为中间省略的参数保留额外的逗号 |
---|---|
2.通过名称指定参数 |
1.2常量——是一种特殊类型的变量,其值不会发生改变。可用于包含关键的数据,或编写更易于理解的代码,VBA有许多内置常量,他们被称为**固有常量**
1.3返回值——通常的规则是,如果希望获取函数的返回值,需要在括号里放置所有的参数。如无需使用返回值,则不应该使用括号。
1.4InputBox——获取输入的文本形式数据
2.调用函数和子过程
2.1注意,从其他过程调用的子过程可与函数过程一样接受输入参数。不能直接运行一个带有输入参数的子过程。(子过程不会产生一个返回值,所以调用时不用括号括起)
3.括号和参数列表
3.1
3.2引用参数列表里的对象时,在括号中放置一个对象引用将使VBA把对象引用转换为对象的默认属性,如(Range(“A1”))被转化为单元格的值,而非对Range对象的引用 3.3使用Call语句(使用范围有限,不能处理返回值。所以一般不用它) 如果使用Call语句,则必须在传递给被调用过程的参数两边放置括号: Call PostInput(SalesData, "B3)4.变量
4.1变量声明
VBA支持两种类型的变量声明,隐式变量声明和显式变量声明 显式声明——Dim语句强制变量声明——模块最顶部的声明部分,所有过程之前放置语句Option Explicit(仅用于其出现处的模块,其他模块需在声明部分重复该语句)
4.2变量的作用域和生存期名称 | 概念 | 分类 |
---|---|---|
作用域 | 定义可以使用变量的过程 | 1.过程级变量——在一个过程里声明的变量(作用域在过程中)2.模块级变量——在模块的声明部分声明的变量(作用域在整个模块) |
生存期 | 定义变量值保存的时间 | 1.在过程中声明的变量生存期是该过程运行期间,仅保留在内存中。过程结束就被释放2.通过在变量前加Static,可将变量生存期延长到工作簿打开期间 |
4.3变量类型
VBA不强制声明变量类型,但是如果声明的话。代码将更有效率如果不声明变量类型,则默认为Variant类型,此类型要比其他类型更占用内存。所以为了代码运行效率,应指定数据类型声明类型 | 单个 | 多个 |
---|---|---|
变量 | Dim Sales As Double | Dim Salesdata As Double, Index As Integer, Startdate As Date |
函数和参数类型 | Function IsHoliday(whichDay As Date) | 1.Sub Marine(Crewsize As Integer, Fuelcapacity As Double)2.也可以为函数声明返回值的类型,下面的示例代表返回值为True或 False的函数Function Isholiday(Whichday As Date) As Boolean |
常量 | Const Version As String = " Release 3 . 9a" | 如果希望某常量对所有模块可用,则声明为Public。 Public Const error666 As String=“您不能执行该操作” |
命名规则——一般把类型头一个字母小写放在变量名称前
5.判断
两种主要结构——IF和Select Case
IF语句更为灵活,而Select Case在判断单个的变量时更好 1.IF语句1.IIF函数 | IIF(逻辑判断,为真时执行的表达式,判断结果为假时表达式) | 1.IIF函数第三个参数必须被定义,而if语句则可忽略Else语句2.IIF函数只能给单个变量返回值,而单行的IF语句能给多个变量赋值 |
---|---|---|
2.IF结构 | IF 逻辑判断 Then 为真时执行 ElseIf(可跟多个) Else 为假时执行 End IF(结束IF) | 当IF结构中含有一个或多个 Elself判断时,VBA将一直判断直至找到结果为True的部分,执行该部分的代码,之后直接进入 End If后面的语句。如果判断的结果都不为True,则执行Else部分的语句 |
2.Select Case语句
6.循环
VBA提供两种结构Do…Loop循环和For…Next循环
Do…Loop循环适用于当逻辑条件满足时终止循环的情形,例如到达数据的结尾。For…Next循环适用于可提前预知循环次数的情形,例如希望为部门里的10个人输入经费时。For…Next循环在VBA中也有一个有趣的变形,即 For Each…Next循环,用于处理集合中的所有对象。例如,可使用该循环处理区域内的所有单元格或者工作簿中的所有工作表6.1Do…Loop循环
IsEmpty函数是判断单元格是否为空的最好方法,使用="",对于计算为零长度字符串的公式,判断的结果为true6.2For…Next循环
与DO…Loop的不同——a.他有一个内置的计数器,在每次执行完之后自动增加,循环的终止条件是计数器超过预设值,而非根据用户指定的逻辑判断结果。 6.3For Each…Next循环 当需要处理集合中每一个成员时,可使用此循环。7.数组
7.1概念
概念 | 定义 | 说明 |
---|---|---|
数组 | 数组是可以包含一个以上数据项的VBA变量,通过在名称后面包含括号声明数组。在括号里放置整数,定义数组中元素的个数:Dim avData(2) | 通过指定元素数值给数组元素赋值:avData(0)=1 |
多维数组 | 实际可以定义多达60维的数组:Dim avData(10,20)Dim avData(1 TO 10,1 TO 20)【上述定义了一个10行20列的表】 | |
动态数组 | 通过忽略数组维数声明一个动态数组:Dim avData()可以在运行时使用 Redim语句声明所需的大小,因而可以使用变量定义索引值的范围:ReDim avData(irows, iColumns)Redim avData(iminRow To imaxRow, iminCol To imaxCol) | |
基数 | 数组中的元素数取决于数组的基数。默认的基数是0,意味着第一个数据元素是项目0。如果基数为0,则 Dim avdata(2)声明了一个含有三个元素的数组。也可以将下面的语句放置在模块顶部的声明部分,声明数组基数以1开始:Option Base 1基数以1开始时, Dim avdata(2)声明一个含有2个元素的数组。项目0不存在。 |
7.2相关函数
a.LBound(下限)函数和UBound(上限)函数;固有常量vbcr(代表一个回车换行符。用于打断消息文本到新的一行) 动态数组8.运行时错误处理
8.1概念
语句 | 说明 |
---|---|
On Error GoTo (LineLabe) | Linelabel是在正常的代码末尾插入的标签,如下面的代码所示,用到了行标签 errTrap。注意,行标签后面紧接着一个冒号(😃。行标签标志着错误恢复代码的开始,应在它之前放置一个Exit语句,避免没有错误发生时执行错误恢复代码。一旦 On Error语句被执行,就启用了错误捕获。如果错误发生,不会显示任何消息,并执行行标签后面的代码。可使用Err对象获取错误信息。Err对象的 Number属性返回错误号, Description属性返回相关的报错消息。可使用Err. Number确定错误,也可将相应的Err. Description纳入自己的报错消息中。 |
On Error Resume (Next) | Resume语句表现为3种形式:1. Resume执行导致错误的语句2.Resume Next返回导致错误语句的下一条语句并执行该语句,从而跳过了有问题的语句3.Resume Linelabel跳转到代码中指定的行标签处,选择从何处恢复执行。该语句导致错误被忽略,因此应该谨慎使用 |
On Error GoTo 0 | 此语句用于再次打开正常的VBA错误处理。否则,将忽略更多的错误。 |
五.书籍本章总结
Ⅲ.总结
以前看过学习方面的书,在本章的学习操作中发现一些问题,如在无意中就变成了对书的摘抄,一点概念体系,知识架构都组织不起来。这不是一次有效的学习。所以我准备下一篇博客要专门就学习流程、学习方式进行总结规范,将有关学习的知识运用起来。提高效率
转载地址:https://blog.csdn.net/qq_31972823/article/details/105783386 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!