首页 excel VBA 语言基础

excel VBA 语言基础

举报
开通vip

excel VBA 语言基础excel VBA 语言基础 一、VBA 语言基础 ? 标识符 1(定义 标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成 对变量、常量、过程、函数、类等的引用。 2(命名规则 1)字母打头,由字母、数字和下划线组成,如A987b_23Abc 2)不能与VB 保留字重名,如public, private ,dim, goto, next, with, integer, single 等 ? 运算符 1. 数学运算符 +(加)、-(减)、Mod(取余)、\(整除)、*(乘...

excel VBA 语言基础
excel VBA 语言基础 一、VBA 语言基础 ? 标识符 1(定义 标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成 对变量、常量、过程、函数、类等的引用。 2(命名规则 1)字母打头,由字母、数字和下划线组成,如A987b_23Abc 2)不能与VB 保留字重名,如public, private ,dim, goto, next, with, integer, single 等 ? 运算符 1. 数学运算符 +(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、^(乘幂) 2. 逻辑运算符 Not(非)、And(与)、Or(或) 3. 关系运算符 =(相等)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于) ? 数据类型 VBA 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 数据类型有(类型名括号内为类型符):字符串型 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 ? 数组 数组是包含相同数据类型的一组变量的集合,对数组中的单个变量引用通过数组索引下标进行。在内存中 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 现为一个连续的内存块。定义规则如下: 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 ‘定义了一个三行四列的二维整型数组变量。 ? 书写 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 1. VBA 不区分标识符的字母大小写,一律认为是小写字母; 2. 一行可以书写多条语句,各语句之间以冒号:分开; 3. 一条语句可以多行书写,以空格加下划线_来标识下行为续行; 4. 标识符最好能简洁明了,不造成歧义。 5. 用单引号打头的部分表示为注释部分。 ? 判断语句 1. If -Then- Else语句 语法:If 条件 Then 语句1 [ Else 语句2 ] Endif 例1:If A>B And C250 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 在对象功能上添加的两个过程,与对象特征密切相关,也是面向对象程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 最重要的组成部分。 ? Excel VBA的基本概念 1、工作簿:Workbooks、Workbook、ActiveWorkbook、ThisWorkbook Workbooks集合包含Excel中所有当前打开的Excel工作簿,亦即所有打开的Excel文件;Workbook对应Workbooks中的成员,即其中的Excel文件;ActiveWorkbook代表当前处于活动状态的工作簿,即当前显示的Excel文件;ThisWorkbook代表其中有Visual Basic代码正在运行的工作簿。 在具体使用中可用Workbooks(index)来引用Workbook对象,其中index为工作簿名称或编号;如Workbooks(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对象中,将其延伸到另一个层次,可以引用Bookl工作簿中的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对象的其中一个方法为ClearContents,该方法将清除单元格区域的内容。指定方法时,将对象和方法组合在一起进行指定,用句点分隔开。例如,要清除活动工作表上的单元格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(“sheet1”,”sheet2”)).Select '同时选择工作表1和工作表2 (20) Sheets(“sheet3”).Delete 或sheet3.Delete '删除工作表sheet3 Sheets(3).Delete '删除第3个工作表 (21) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines '切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (22) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (23) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (24) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (25) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation = 2 '将页面设置更改为横向 (26) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 (27) ActiveSheet.PageSetup.LeftFooter=Application.UserName ‘将用户名放置在活动工作表的页脚 行、列、单元格 (28) rows(i) 或rows(“5”) '当前工作表的第i行 或第5行 columns(5)或columns(“5”) 或columns(“E”) '当前工作表的第5列 (29) rows(i).select '选定当前工作表的第i行 rows(i).clearContents '清除当前工作表的第i行的 内容 rows(i).clear '清除当前工作表的第i行的内容和其中的格式 rows(i).Delete '删除当前工作表的第i 行(下面各行上移) (30) cells(i , j) '当前工作表的第i行第j列单元格 sheet3. cells(i , j) '工作表sheet3的第i 行第j列单元格 Sheets(“abcd”).cells(i , j) '名为abcd的工作表第i 行第j列单元格 (31) Cells.Select '选定当前工作表的所有单元格 Cells.Clear '清除工作表中所有单元格的内容及格式 (32) cells.count ‘当前工作表的总单元格数 UsedRange.Cells.Count ‘当前工作表已用范围的单元格数 (33) ActiveCell.Offset(0, 1).Select '当前单元格向左移动一格 ActiveCell.Offset(0, -1).Select '当前单元格向右移动一格 ActiveCell.Offset(1 , 0).Select '当前单元格向下移动一格 ActiveCell.Offset(-1 , 0).Select '当前单元格向上移动一格 区域 (34) Range(“A2:C4”) ' 当前工作表上区域A2:C4 Range(cells(i+1,i),cells(j,j-1)) '若i=1,j=4, 则表示当前工作表上区域A2:C4 Range("A:A") 'A列 Range("1:3") '第一行至第三行 Range("1:1,3:3") '第一行与第三行 Range("A:C") ' A列到C列的区域 Sheet3. Range(“A2:C4”) '工作表sheet3上区域A2:C4 Range("1:5") '第1行到第5行的区域 Range("A:A,C:C") 'A列与C列 (35) Range("C5:D9,G9:H16,B14:D18") '当前工作表上区域C5:D9和G9:H16和B14:D18 (36) set Myr=Range(“A2:C4”) '将区域A2:C4设为变量Myr (37) Range(“A1:D4”).Clear '彻底清除A1至D4单元格区域的内容,包括格式 (38) Range(“A1:D8”).Copy Range(“F1”) '将单元格区域A1:D8复制到单元格F1开始的区域中 (39)Range(“A1:D8”).Cut Range(“F1”) '将单元格区域A1:D8剪切到单元格F1开始的区域中 (40) Selection.Count '当前选中区域的单元格数 cells.count ‘当前工作表总的单元格数 (41) Range(“A1:D4”).Font.ColorIndex ‘区域A2:D4的文本颜色索引 Range(“A1:D4”).Interior.ColorIndex ‘区域A2:D4的背景色索引 Range(“A1:D4”).Borders.LineStyle ‘区域A2:D4的边框索引 窗体 (42) MsgBox “Hello!” '消息框中显示消息Hello (43) Ans=MsgBox(“Continue?”,vbYesNo) '在消息框中点击“是”按钮,则Ans值为vbYes;点击“否” 按钮,则Ans值为vbNo。 (44) Userform1.Show ‘显示用户窗体Userform1(该窗体处于隐藏状态) (45) Load .Userform1 ‘加载一个用户窗体Userform1 三、内部函数 在VBA 程序语言中有许多内置函数,可以帮助程序代码设计和减少代码的编写工作。 1(测试函数 IsNumeric(x) ‘是否为数字,返回Boolean 结果。(即:True or False) IsDate(x) ‘是否是日期,返回Boolean 结果。 IsEmpty(x) ‘是否为Empty,返回Boolean 结果。 IsArray(x) ‘指出变量是否为一个数组。 IsError(expression) ‘指出表达式是否为一个错误值 IsNull(expression) ‘指出表达式是否不包含任何有效数据(Null)。 IsObject(identifier) ‘指出标识符是否表示对象变量 2(数学函数 Sin(X)、Cos(X)、Tan(X)、Atan(x) ‘三角函数,单位为弧度 Log(x) ‘返回x 的自然对数 Exp(x) ‘返回ex Abs(x) ‘返回绝对值 Int(number)、Fix(number) ‘都返回参数的整数部分,区别:Int 将-8.4 转换成-9,而Fix 将 -8.4 转换成-8 Sgn(number) ‘返回一个Variant(Integer),指出参数的正负号 Sqr(number) ‘返回一个Double,指定参数的平方根 VarType(varname) ‘返回一个Integer,指出变量的子类型 Rnd(x) ‘返回0-1 之间的单精度随机数据,x 为随机种子 3(字符串函数 Trim(string) ‘去掉string 左右两端空白 Ltrim(string) ‘去掉string 左端空白 Rtrim(string) ‘去掉string 右端空白 Len(string) ‘计算string 长度 Left(string,x) ‘取string 左段x 个字符组成的字符串 Right(string,x) ‘取string 右段x 个字符组成的字符串 Mid(string,start,x) ‘取string 从start 位开始的x 个字符组成的字符串 Ucase(string) ‘转换为大写 Lcase(string) ‘转换为小写 Space(x) ‘返回x 个空白的字符串 Asc(string) ‘返回一个integer,代表字符串中首字母的字符ASCII编码 Chr(charcode) ‘返回string,其中包含有与指定的字符代码相关的字符 Instr([Start,]string1,string2[,compare]) ‘返回字符串string2在字符串string1中的位置 Replace(expression_r,find,replace[,start[,count[,compare]]]) ‘字符串替换 4(转换函数 CBool(expression) ‘转换为Boolean 型 CByte(expression) ‘转换为Byte 型 CCur(expression) ‘将数值表达式转换为Currency 型 CDate(expression) ‘将数值表达式转换为Date 型 CDbl(expression) ‘将数值表达式转换为Double 型 CDec(expression) ‘将数值表达式转换为Decemal 型 CInt(expression) ‘将数值表达式转换为Integer 型 CLng(expression) ‘将数值表达式转换为Long 型 CSng(expression) ‘将数值表达式转换为Single 型 CStr(expression) ‘将数值表达式转换成String 型 CVar(expression) ‘将数值表达式转换为Variant 型 Val(string) ‘将字符串转换为数值型 Str(number) ‘将数值转换为字符串String 5(时间函数 Now ‘返回一个Variant(Date),根据计算机系统设置的日期和时间来指定日期和时间。 Date ‘返回包含系统日期的Variant(Date)。 Time ‘返回一个指明当前系统时间的Variant(Date)。 Timer ‘返回一个Single,代表从午夜开始到现在经过的秒数。 TimeSerial(hour,minute,second) ‘返回一个Variant(Date),包含具有具体时、分、秒的时间。 DateDiff(interval,date1,date2[,firstdayofweek[,firstweekofyear]]) ‘返回Variant(Long)的值,表示两个指定日期间的时间间隔数目 Second(time) ‘返回一个Variant(Integer),其值为0 到59 之间的整数,表示一分钟之中的某个秒 Minute(time) ‘返回一个Variant(Integer),其值为0 到59 之间的整数,表示一小时中的某分钟 Hour(time) ‘返回一个Variant(Integer),其值为0 到23 之间的整数,表示一天之中的某一钟点 Day(date) ‘返回一个Variant(Integer),其值为1 到31 之间的整数,表示一个月中的某一日 Month(date) ‘返回一个Variant(Integer),其值为1 到12 之间的整数,表示一年中的某月 Year(date) ‘返回Variant(Integer),包含表示年份的整数。 Weekday(date,[firstdayofweek]) 返回一个Variant(Integer) 包含一个整数,代表某个 日期是星期几
本文档为【excel VBA 语言基础】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_153723
暂无简介~
格式:doc
大小:41KB
软件:Word
页数:0
分类:
上传时间:2018-03-23
浏览量:20