1VBA笔记8-211.VBA是什么:微软开发出来的应用程序一种能共享通用的自动化语言,VBA能使已有的应用程序(excel等)自动化,可以创建自定义的解决方案.等同:可以用excel的宏语言来使excel自动化,使用wordBASIC使word自动化,等等。VBA可以称作excel的“遥控器”.此外,如果你愿意,还可以将excel用做开发平台实现应用程序.2.VBA可以实现的功能1.使重复的任务自动化.2.自定义excel工具栏,菜单和界面.3.简化模板的使用.4.自定义excel,使其成为开发平台.5.创建报表.6.对数据进行复杂的操作和分析.3.宏3.1录制简单的宏选择“工具”—“宏”—“录制新宏”—输入宏名—确定—开始录制(状态栏中显示“录制”)—结束宏录制(“工具”—“宏”—“停止录制”。)*开始录制并非一个按钮,而是你的一系列操作,宏会记录下来变为自己的操作。3.2执行宏选择任何一个单元格—选择“工具”—“宏”—“宏”(出现“宏”对话框)—选择相应的宏名—“执行”。3.3查看录制的代码工具”—“宏”—“宏”(显示“宏”对话框)—选择某个宏—“编辑”VBA的编辑器窗口(VBE)Sub改变颜色()//宏名’’改变颜色Macro’xw记录的宏2000-6-10’’//以上五行录制时自动生成Range(A5).Select//表示无论选择哪个单元格,最后都只作用于A5WithSelection.Interior//设置属性在选择区域的内部(开始录制属性).ColorIndex=3//颜色为3号色:红色.Pattern=xlSolid//区域内部图案=纯色(录制时自动生成,可删)PatternColorIndex=xlAutomatic//内部图案底纹颜色=自动(自动生成,可删)EndWith//结束属性录制EndSub//结束宏录制一个名为练习的宏:Sub练习()''练习宏''WithSelection.Borders(xlEdgeLeft).LineStyle=xlContinuous.ColorIndex=0.TintAndShade=02.Weight=xlMediumEndWithWithSelection.Borders(xlEdgeTop).LineStyle=xlContinuous.ColorIndex=0.TintAndShade=0.Weight=xlMediumEndWithWithSelection.Borders(xlEdgeBottom).LineStyle=xlContinuous.ColorIndex=0.TintAndShade=0.Weight=xlMediumEndWithWithSelection.Borders(xlEdgeRight).LineStyle=xlContinuous.ColorIndex=0.TintAndShade=0.Weight=xlMediumEndWithSelection.Borders(xlInsideVertical).LineStyle=xlNoneSelection.Borders(xlInsideHorizontal).LineStyle=xlNoneWithSelection.Interior.Pattern=xlSolid.PatternColorIndex=xlAutomatic.Color=5296274.TintAndShade=0.PatternTintAndShade=0EndWithWithSelection.Font.Color=-16727809.TintAndShade=0EndWithEndSub3.4为宏指定快捷键创建宏时指定:只须在录制宏时在输入宏名后,在“快捷键”文本框中输入相应的键。录制宏后指定:选择“工具”—“宏”,显示“宏”对话框—选择要指定快捷键的宏—“选项”—选项”对话框3.5决定宏保存的位置在创建时选择保存位置。1)当前工作簿。(只有该工作簿打开时,该宏才可用。)2)新工作簿。3)个人宏工作簿。(要让某个宏在多个工作簿都能使用,那么就应当创建个人宏工作簿,并将宏保存于其中。个人宏工作簿保存在“XLSTART”文件夹中。)3.6将宏指定给按钮工具栏—“按钮”—添加按钮完成-“指定宏”对话框—选择宏-确定—改名按钮名称3.7将宏指定给图片或其他对象指定给图片:单击某个图片—单击菜单中“指定宏”进行设置即可;3将宏指定给“工具栏按钮”:1)打开“HOUR2”工作簿,选择“工具”-“定义”,显示“自定义工具栏”对话框。2)从“类别”列表框中选择“宏”,从“命令”列表框中选择“自定义按钮”。3)将“自定义按钮”拖动到工具栏。4)右键单击该按钮,选择“指定宏”,显示“指定宏”对话框。5)选择“格式化文本”并确定。6)单击“关闭”按钮,关闭“自定义工具栏”对话框。7)试着在某个单元格中输入文本,单击工具栏按钮运行该宏。4.控件4.1向工作表添加控件4.2设置控件的特性5.理解变量5.1创建一个简单的过程1)创建一个名为你叫什么名字的过程.2)在过程中输入如下代码:Inputbox输入你的名字:现在不要担心inputbox语句的语法,将在第六学时中了解到有关这条命令的更多信息.3)按下F5键运行过程,这时会显示一个输入框,要求输入你的名字.4)输入你的名字并按确定按钮,则结束该过程.5.2变量的数据类型VBA数据类型:byte,string,variant,integer,single。。。5.3声明变量Dim变量名AS数据类型5.4简单的子程序1)创建一个名为显示你的名字的子程序.2)输入以下代码:PublicSub显示你的名字()Dims名字AsStrings名字=Inputbox(请输入你的名字:)Msgbox你好&s名字BREndSub3)将鼠标放到过程中的任何地方,按下F5键运行过程,会显示一个输入框.4)输入你自己的名字并按回车键,会显示一个消息框,显示的文字中包含你自己的名字.5)单击确定按钮,返回过程中.5.5使用数组Dimarray_name(n)Astype(其中n是数组元素的个数)例:Dims学生名字(9)AsInteger(保留10个学生名字)Dimdyn_array()Astype(N可以省略)ReDimdyn_array()(array_size):在程序运行时用:ReDim语句指定数组的大小,array_size代表数组的新大小。ReDimPreservedyn_array(array_size):保留数组的数值5.6变量赋值Dimi人数AsIntegerDimi考试成绩AsIntegerDimiAsIntegeri人数=inputbox(输入学生的人数:)ReDimPreservei考试成绩(i数量)Fori=1toi人数i考试成绩(i)=inputbox(输入考试成绩&i)Next5.7使用常量4constS销项税率AsLong=0.17通常常量声明时用全大写字母以区分变量.5.8公共级变量/常量变:PublicvariablenameAsdatatype常:PublicconstCONSTANAMEdatatype=value5.9作用域1.某一过程顶部:局部or过程级;2.某一模块顶部:模块级3.所有过程(通用声明区域):公共级/全局8-226.VBA语言基础6.1标识符标识变量、常量、过程、函数、类等。利用它可以完成对变量、常量、过程、函数、类等的引用。*字母打头,不能与VB保留字重名,如public,private,dim,goto,next,with,integer,single等。6.2运算符1)赋值运算符2)数学运算符&、+(字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)3)逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含)4)关系运算符=(相同)、(不等)、(大于)、(小于)、=(不小于)、=(不大于)、Like、Is5)位运算符Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含)6.3数据类型名称符号长度字符串型String$字符长度(0-65400)字节型Byte无1布尔型Boolean无2整数型Integer%2长整数型Long&4单精度型Single!4双精度型Double#8日期型Date无8公元100/1/1-99/12/31货币型Currency@8小数点型Decimal无14变体型Variant无以上任意类型,可变对象型Object无46.4变量与常量Dim变量as类型'定义为局部变量,如DimxyzasintegerPrivate变量as类型'定义为私有变量,如PrivatexyzasbytePublic变量as类型'定义为公有变量,如PublicxyzassingleGlobal变量as类型'定义为全局变量,如GloblalxyzasdateStatic变量as类型'定义为静态变量,如Staticxyzasdouble*作用域的原则是,哪部份定义就在哪部份起作用*常量为变量的一种特例,用Const定义,且定义时赋值,程序中不能改变值,见5.7和5.8节6.5数组同5.5节6.6书写规范1)VBA不区分标识符的字母大小写,一律认为是小写字母;2)一行可以书写多条语句,各语句之间以冒号:分开;3)一条语句可以多行书写,以空格加下划线_来标识下行为续行;54)标识符最好能简洁明了,不造成歧义。7语句7.1判断语句1)If…Then…Else语句:①IfconditionThen[statements][Elsestatements]。。②IfconditionThen[statements][ElseIfconditionThenstatements][elseif。。then..else…]…EndIf例:IfNumber10ThenDigits=1ElseIfNumber100ThenDigits=2ElseDigits=3EndIf2)SelectCase…Case…EndCase语句:SelectCasePidCase“A101”Price=200Case“A102”Price=300……CaseElsePrice=900EndCase3)Choose函数choose(index,choce-1,choice-2,…,choice-n),可以用来选择自变量串列中的一个值,并将其返回。index为必要参数,数值表达式或字段,它的运算结果是一个数值,且界于1和可选择的项目数之间。GetChoice=Choose(Ind,Speedy,United,Federal)4)Switch函数Switch(expr-1,value-1[,expr-2,value-2_[,expr-n,value-n]])switch函数和Choose函数类似,但它是以两个一组的方式返回所要的值,在串列中,最先为TRUE的值会被返回。expr为必要参数,要加以计算的Variant表达式。value为必要参数。如果相关的表达式为True,则返回此部分的数值或表达式,没有一个表达式为True,Switch会返回一个Null值。7.2循环语句1)ForNext语句以指定次数来重复执行一组语句ForcounterstartToend[Stepn]//stepn缺省值为step1[statements][ExitFor][statements]Next[counter]如1:ForWords=10To1Step1//建立10次循环ForChars=0To9//建立10次循环MyString=MyString&Chars//将数字添加到字符串中NextChars//counter+1进入下一次chars循环MyString=MyString&//每一步words循环,添加一个空格NextWords2)