一、VBA 语言基础
? 标识符
1.定义
标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成
对变量、常量、过程、函数、类等的引用。
2.命名规则
1)字母打头,由字母、数字和下划线组成,如A987b_23Abc
2)不能与VB 保留字重名,如public, private ,dim, goto, next, with, integer, single等
? 运算符
1. 数学运算符  +(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、^(乘幂)
2. 逻辑运算符  Not(非)、And(与)、Or(或)
3. 关系运算符  =(相等)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)
? 数据类型
VBA 标准数据类型有(类型名括号内为类型符):字符串型 String($),字节型Byte,布尔型Boolean,整数型Integer(%),长整数型Long(&),单精度实型Single(!),双精度实型Double(#),日期型Date,货币型Currency(@),变体型Variant 等,此外用户用Type 自定义的数据类型。
? 变量与常量
1. VBA 允许使用未定义的变量,默认是变体变量。
2. 变量定义语句及变量作用域
Dim 变量 as 类型        '定义为局部变量,如Dim x as integer
Private 变量as 类型      '定义为私有变量, 如Private y as byte
Public 变量as 类型        '定义为公有变量,如Public z as single
Global 变量as 类型        '定义为全局变量,如Globlal a as date
Static 变量as 类型        '定义为静态变量,如Static b  as double
一般变量作用域的原则是,那部份定义就在那部份起作用,模块中定义则在该模块那作用。为了方便,可以在变量名后加类型符来代替“ as 类型”,此时,此时变量名与类型符之间不能有空格。
例如  Dim x as integer,y as single,  z as string ,也可以用类型符简单定义为 dim x%, y!, z$
3. 常量为变量的一种特例,用Const 定义,且定义时赋值,程序中不能改变值,作用域也如同变量作用域。如下定义:Const  Pi  3.1415926
? 数组
数组是包含相同数据类型的一组变量的集合,对数组中的单个变量引用通过数组索引下标进行。在内存中表现为一个连续的内存块。定义规则如下:
Dim 数组名(下标) as 类型。二维数组是按行、列排列,如a(行,列)。
例如
Dim a(10) as integer        ‘定义了a(0),a(1),…,a(10) 这11个整型变量,
Dim b(1 to 10) as integer    ‘定义了b(1),…,b(10) 这10个整型变量,
Dim c(1 to 3, 1 to 4) as integer ‘定义了一个三行四列的二维整型数组变量。
? 书写规范
1. VBA 不区分标识符的字母大小写,一律认为是小写字母;
2. 一行可以书写多条语句,各语句之间以冒号:分开;
3. 一条语句可以多行书写,以空格加下划线_来标识下行为续行;
4. 标识符最好能简洁明了,不造成
歧义。
5. 用单引号打头的部分表示为注释部分。
? 判断语句
1. If -Then- Else语句
语法:If 条件 Then 语句1 [ Else 语句2 ] Endif
例1:If A>B And C<D Then
x=y+2
Else
x=z+3 
Endif
例2:If  x>250  Then
x = x-100 
Endif
2. Select-Case - EndCase 语句
例:
Select  Pid
Case “A101”    ‘如果Pid=“A101”
Price=200
Case “A102”    ‘如果Pid=“A102”
Price=300
CaseElse      ‘否则
Price=900
EndCase
? 循环语句
1. For-Next 语句
以指定次数来重复执行一组语句.
例1:For i=1 To 10
循环体        ‘表示i=1,2,3,…10依次执行循环体
Next  i
例2:For i=10 To 1 Step -1
循环体          ‘表示i=10,9,8,…3,2,1依次执行循环体
Next  i
2. For Each Next 语句
主要功能是对一个数组或集合对象进行,让所有元素重复执行一次语句。
3. Do{while|until} Loop语句
为当型循环(或while  wend),until 为直到型循环。
例:Do while i<10
循环体        ‘表示只要i<10就反复执行循环体
Loop
注意,可以使用 Exit For 语句来退出For循环,用 Exit Do 语句来退出 Do...Loop 语句。
4. With 语句
在一个单一对象上执行一系列的语句不用重复指出对象的名称。
With  object
[statements]
End With
? 错误语句处理
执行阶段有时会有错误的情况发生,利用OnError 语句来处理错误,启动一个错误的处理程序。
语法如下:
OnError Goto Line        ‘当错误发生时,会立刻转移到line 行去
OnError Resume Next      ‘当错误发生时,会立刻转移到发生错误的下一行去
OnErro  Goto 0          ‘当错误发生时,会立刻停止过程中任何错误处理过程
? 过程和函数
过程是构成程序的一个模块,往往用来完成一个相对独立的功能。过程可以使程序更清晰、
更具结构性。VBA 具有四种过程:Sub 过程、Function 函数、Property属性过程和Event 事件
过程。
1.Sub 过程
Sub 过程是一系列由 Sub 和 End Sub 语句所包含起来的程序段,它们会执行动作却不能返回一个值。Sub 过程可有参数,例如常数、变量、或是表达式等来调用它。如果一个 Sub 过程没有参数,则它的 Sub 语句必须包含一个空的圆括号。
2.Function 函数
Function 函数是一系列由 Function 和 End Function所包含起来的程序段,它们会执行动作并能返回一个值。Function可有参数,例如常数、变量、或是表达式等来调用它。如果一个 Function没有参数,则它的 Function语句必须包含一个空的圆括号。
Sub和Function的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef或省略)。
3.Property 属性过程和Event 事件过程
这是VB 在对象功能上添加的两个过程,与对象特征密切相关,也是面向对象程序设计最重要的组成部分。
? Excel VBA的基本概念
1、工作簿:Workbooks、Workbook、ActiveWorkbook、ThisWorkbook
  Workbooks集合包含Excel中所有当前打开的Excel工作簿,亦即所有打开的Excel文件;Workbook对应Workbooks中的成员,即其中的Excel文件;ActiveWorkbook代表当前处于活动状态的工作簿,即当前显示的Excel文件;ThisWorkbook代表其中有Visual Basic代码正在运行的工作簿。
  在具体使用中可用Workbooks(index)来引用Workbook对象,其中index为工作簿名称或编号;如Workb
ooks(1)、Workbooks("年度报表.xls")。而编号按照创建或打开工作簿的顺序来确定,第一个打开的工作簿编号为1,第二个打开的工作簿为2……。
2、工作表:Worksheets、Worksheet、ActiveSheet
  Worksheets集合包含工作簿中所有的工作表,即一个Excel文件中的所有数据表页;而Worksheet则代表其中的一个工作表;ActiveSheet代表当前处于的活动状态工作表,即当前显示的一个工作表。
  可用Worksheets(index)来引用Worksheet对象,其中index为工作表名称或索引号;如Worksheets(1)、Worksheets("第一季度数据")。工作表索引号表明该工作表在工作表标签中的位置:第一个(最左边的)工作表的索引号为1,最后一个(最右边的)为Worksheets.Count。需要注意的是:在使用过程中Excel会自动重排工作表索引号,保持按照其在工作表标签中的从左至右排列,工作表的索引号递增。因此,由于可能进行的工作表添加或删除,工作表索引号不一定始终保持不变。
3、 行与列:Rows、Columns、Row、Column
  Rows、Columns分别代表活动工作表、单元格区域范围Range、指定工作表中的所有行数、列数。对于一个多选单元格区域范围Range的Rows、Columns,只返回该范围中第一个区域的行数、列数。例如,如果Range对象有两个区域(areas)A1:B2和C3:D4,Rows.Count返回2而不是4。
  可通过Rows(行号)、Columns(列号)来引用相应的行与列;如Rows(3)、Columns(4)分别对应第三行、D列。
利用Rows、Columns可以获得区域中第一块的第一行行号、第一列列号,所得值均以十进制数表示。
4、单元格:Cells、ActiveCell、Range、Areas
  Cells(row,column)代表单个单元格,其中row为行号,column为列号。如可以用Cells(1,1)、Cells(10,4)来引用"A1"、"D10" 单元格。ActiveCell代表活动工作表的活动单元格,或指定工作表的活动单元格。
  Range代表工作表中的某一单元格、某一行、某一列、某一选定区域(该选定区域可包含一个或若干连续单元格区域)或者某一三维区域。
  可用Range(arg)来引用单元格或单元格区域,其中arg可为单元格号、单元格号范围、单元格区域名称。如Range("A5")、Range("A1:H8")、Range("Criteria")。虽然可用Range("A1")返回单元格A1
,但用Cells更方便,因为此时可用变量指定行和列。可将Range与Cells结合起来使用,如Range(Cells(1,1),Cells(10,10))代表单元格区域"A1:J10"。
5、图表:Chart 、Charts、ChartObject、ChartObjects、ActiveChart
  Chart代表工作簿中的图表。该图表既可为嵌入式图表(包含在ChartObject中),也可为一个分开的(单独的)图表工作表。
  Charts代表指定工作簿或活动工作簿中所有图表工作表的集合,但不包括嵌入式在工作表或对话框编辑表中的图表。使用Charts(index) 可引用单个Chart图表,其中index是该图表工作表的索引号或名称;如Charts(1)、Charts("销售图表")。图表工作表的索引号表示图表工作表在工作簿的工作表标签栏上的位置。Charts(1)是工作簿中第一个(最左边的)图表工作表;Charts(Charts.Count)为最后一个(最右边的)图表工作表。
  ChartObject代表工作表中的嵌入式图表,其作用是作为Chart对象的容器。利用ChartObject可以控制工作表上嵌入式图表的外观和尺寸。
  ChartObjects代表指定的图表工作表、对话框编辑表或工作表上所有嵌入式图表的集合。可由ChartObjects(index)引用单个ChartObject,其中index为嵌入式图表的编号或名称。如Worksheets("Sheet1").ChartObjects(1)、Worksheets("sheet1").ChartObjects("chart1")分别对应"Sheet1"工作表中的第一个嵌入式图表、以及名为"Chart1"的嵌入式图表。
  ActiveChart可以引用活动状态下的图表,不论该图表是图表工作表,或嵌入式图表。而对于图表工作表为活动工作表时,还可以通过ActiveSheet属性引用之。
6、对象
VBA处理包含在它的主应用程序中的对象(在这种情况下,Excel是主应用程序)。Excel提供了可以处理的100多类对象,对象的例子包括工作簿、工作表、工作表上的单元 格区域、图表和画的矩形。还可以根据开发人员的意愿处理更多的对象,可以使用VBA代码处理这些对象。对象类是按照分层结构排列的。对象可以是其他对象的容器。例如,Excel是一个称为”Application”的对象,它包含了其他的对象,比如Workbook对象和CommandBar对象。一个Workbook对象可以包含其他的一些对象,比如Worksheet对象和Chart对象。一个Worksheet对象可以包含的对象比如诸如cells, Range对象等。这些对象的排列模式称为Excel的对象模型。
7、 对象层次结构
当引用一个内含的或者成员对象的时候,通过在容器和成员之间使用句点作为分隔符来指定它在对象层次结构中的位置。例如,可以引用名为 ”Bookl.Xls” 的工作簿:
Application.Workbooks("Bookl.xls")
这样即引用位于Workbooks集合中的Bookl.xls工作簿。Workbooks集合包含在Excel Application对象中,将其延伸到另一个层次,可以引用Bo
resize函数vba
okl工作簿中的Sheetl工作表:
Application.Workbooks("Bookl.xls").Worksheets("Sheetl")
可以继续延伸到下一层,按照如下方式引用某个特定的单元格:
Application.Workbooks("Book1.xls").Worksheets("Sheetl").Range("Al")
8、 对象属性
对象都有属性。可以认为一个属性就是对某个对象的一个设置。例如,Range对象的属性包括Value和Name。Chart对象包括诸如HasTitle和Type之类的属性。可以使用VBA 来定义对象的属性,还可以对它们进行更改。引用属性时,要将对象和属性结合在一起引用,用句点分隔开。例如,可以如下引用Sheetl工作表上的单元格A1中的值:
Worksheets("Sheetl").Range("Al").Value
9、 对象方法
对象都有方法。一个方法就是指与对象一起执行的一个动作。例如,Range对象的其中一个方法为Clear
Contents,该方法将清除单元格区域的内容。指定方法时,将对象和方法组合在一起进行指定,用句点分隔开。例如,要清除活动工作表上的单元格A1中的内容,可以使用下列语句:
Range("Al”).ClearContents
二、一些常用VBA语句
工作簿
(1) Workbooks.Add                      '创建一个新的工作簿
(2) Workbooks(“book1.xls”).Activate        '激活名为book1的工作簿
(3) ThisWorkbook.Save                  '保存当前工作簿
(4) ThisWorkbook.close                  '关闭当前工作簿
(5) ActiveWorkbook.Sheets.Count          '获取活动工作薄中工作表数
(6) ActiveWorkbook.name                  '返回活动工作薄的名称
(7) ThisWorkbook.Name                  ‘返回当前工作簿名称
(8) ThisWorkbook.FullName                ‘返回当前工作簿路径和名称
(9) ActiveWindow.EnableResize=False        ‘禁止调整活动工作簿的大小
(10) Application.Window.Arrange xlArrangeStyleTiled  ‘将工作簿以平铺方式排列
(11) ActiveWorkbook.WindowState=xlMaximized      ‘将当前工作簿最大化
工作表
(12) ActiveSheet.UsedRange.Rows.Count        ‘当前工作表中已使用的行数
(13) ActiveSheet.UsedRange.Columns.Count      ‘当前工作表中已使用的列数
(14) Rows.Count                            ‘获取工作表的最大行数(注:考虑兼容性)
(15) Columns.Count                          ‘获取工作表的最大列数(注:考虑兼容性)
(16) Sheets(Sheet1).Name= “Sum”                '将Sheet1命名为Sum
Sheets(i).Name= “Sum1”                    '将第i个工作表命名为Sum1
(17) Sheets.Add                                '添加一个新工作表在当前工作表前
Sheets.Add Before:=sheets2                  '添加一个新工作表在sheet2工作表前
Sheets.Add After:=Sheets(Sheets.Count)        '添加一个新工作表在所有工作表之后
(18) ActiveSheet.Move (After:= Sheets(Sheets.Count)  '将当前工作表移至工作表的最后
(19) Worksheets(Array(

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。