如2:
Ifx>250Thenx=x-100或者,可以使用块形式的语法:
IfconditionThen[statements][ElseIfcondition-nThen[elseifstatements]...[Else[elsestatements]]EndIf
如1:
IfNumber<10ThenDigits=1ElseIfNumber<100ThenDigits=2ElseDigits=3EndIf
2)SelectCase…Case…EndCase语句如1:
SelectCasePid
Case“A101”
Price=200
Case“A102”
Price=300……CaseElse
Price=900
EndCase
3)Choose函数
choose(index,choce-1,choice-2,…,choice-n),可以用来选择自变量串列中的一个值,并将其返回,index
必要参数,数值表达式或字段,它的运算结果是一个数值,且界于1和可选择的项目数之间。
choice必要参数,Variant表达式,包含可选择项目的其中之一。
如:
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值。
第九节循环语句
1)ForNext语句以指定次数来重复执行一组语句Forcounter=startToend[Stepstep]'step缺省值为1[statements][ExitFor][statements]Next[counter]如1:
ForWords=10To1Step-1'建立10次循环ForChars=0To9'建立10次循环MyString=MyString&Chars'将数字添加到字符串中NextChars'Incrementcounter
MyString=MyString&""'添加一个空格NextWords
2)ForEach…Next语句主要功能是对一个数组或集合对象进行,让所有元素重复执行一次语句ForEachelementIngroup
Statements[Exitfor]Statements
Next[element]如1:
ForEachrang2Inrange1
Withrange2.interior
.colorindex=6.pattern=xlSolid
Endwith
Next
这上面一例中用到了With…EndWith语句,目的是省去对象多次调用,加快速度;语法为:
Withobject[statements]EndWith
3)Do…loop语句在条件为true时,重复执行区块命令
Do{while|until}condition'while为当型循环,until为直到型循环,顾名思义,不多说啦
Statements
Exitdo
Statements
Loop或者使用下面语法Do'先do再判断,即不论如何先干一次再说
Statements
Exitdo
Statements
Loop{while|until}condition
第十节其他类语句和错误语句处理
一.其他循环语句
结构化程序使用以上判断和循环语句已经足够,建议不要轻易使用下面的语句,虽然VBA还支持。
1)Gotoline该语句为跳转到line语句行
2)Onexpressiongosubdestinatioinlist或者onexpressiongotodestinationlist语句为根据exprssion表达式
值来跳转到所要的行号或行标记
3)Gosubline…line…Return语句,Return返回到Gosubline行,如下例:
Subgosubtry()
Dimnum
Num=inputbox(“输入一个数字,此值将会被判断循环”)
Ifnum>0thenGosubRoutine1:
Debug.printnum:
Exitsub
Routine1:
Num=num/5
Return
Endsub4)while…wend语句,只要条件为TRUE,循环就执行,这是以前VB老语法保留下来的,如下例:
whilecondition‘whileI<50[statements]‘I=I+1wend‘Wend
二.错误语句处理
执行阶段有时会有错误的情况发生,利用OnError语句来处理错误,启动一个错误的处理程序。
语法如下:
OnErrorGotoLine‘当错误发生时,会立刻转移到line行去
OnErrorResumeNext‘当错误发生时,会立刻转移到发生错误的下一行去
OnErroGoto0‘当错误发生时,会立刻停止过程中任何错误处理过程
第十一节过程和函数
过程是构成程序的一个模块,往往用来完成一个相对独立的功能。
过程可以使程序更清晰、更具结构
性。
VBA具有四种过程:
Sub过程、Function函数、Property属性过程和Event事件过程。
一.Sub过程
Sub过程的参数有两种传递方式:
按值传递(ByVal)和按地址传递(ByRef)。
如下例:
Subpassword(ByValxasinteger,ByRefyasinteger)
Ify=100theny=x+yelsey=x-yx=x+100
Endsub
Subcall_password()
Dimx1asinteger
Dimy1asintegerx1=12y1=100Callpassword(x1,y1)‘调用过程方式:
1.Call过程名(参数1,参数2…);2.过程名参数1,参数2…debug.printx1,y1‘结果是12、112,y1按地址传递改变了值,而x1按值传递,未改变原值
Endsub
二.Function函数
函数实际是实现一种映射,它通过一定的映射规则,完成运算并返回结果。
参数传递也两种:
按值传
递(ByVal)和按地址传递(ByRef)。
如下例:
Functionpassword(ByValxasinteger,byrefyasinteger)asboolean
Ify=100theny=x+yelsey=x-yx=x+100ify=150thenpassword=trueelsepassword=false
EndFunction
Subcall_password()
Dimx1asinteger
Dimy1asintegerx1=12y1=100ifpasswordthen‘调用函数:
1.作为一个表达式放在=右端;2.作为参数使用debug.printx1
endifEndsub
三.Property属性过程和Event事件过程
这是VB在对象功能上添加的两个过程,与对象特征密切相关,也是VBA比较重要组成,技术比较
复杂,可以参考相关书籍。
第十二节内部函数
在VBA程序语言中有许多内置函数,可以帮助程序代码设计和减少代码的编写工作。
一.测试函数
IsNumeric(x)‘是否为数字,返回Boolean结果,TrueorFalse
IsDate(x)‘是否是日期,返回Boolean结果,TrueorFalse
IsEmpty(x)‘是否为Empty,返回Boolean结果,TrueorFalse
IsArray(x)‘指出变量是否为一个数组。
IsError(expression)‘指出表达式是否为一个错误值IsNull(expression)‘指出表达式是否不包含任何有效数据(Null)。
IsObject(identifier)‘指出标识符是否表示对象变量
二.数学函数
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为随机种子
三.字符串函数
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,代表字符串中首字母的字符代码
Chr(charcode)返回string,其中包含有与指定的字符代码相关的字符
四.转换函数
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
五.时间函数
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),包含一个整数,代表某个日期是星期几
第二章ExcelVBA常用对象之使用
第一节文件的操作
1)Excel文件
1.1新建与打开一.新建Workbooks.Add
二.打开
Workbooks.Open"路径\"&"文件名.xls"
三.文件打开对话框的使用
Application.GetOpenFilename(fileFilter:
="Excelfiles(*.xls),*.xls,Allfiles(*.*),*.*")
示例:
flag=FalseDoWhileNotflag'对话框打开已有Excel文件fm=Application.GetOpenFilename(fileFilter:
="Excelfiles(*.xls),*.xls,Allfiles(*.*),*.*")
Iffm<>FalseThenWorkbooks.OpenfmSetbb=ActiveWorkbook'把bb变量设为当前活动工作簿对象,打开一工作簿时,该工作簿自动为当前活动工作簿flag=TrueEndIfLoop
1.2保存与关闭一.保存Workbooks("文件.xls").Save
二.另存对话框的使用
Application.GetSaveAsFilename(fileFilter:
="Excelfiles(*.xls),*.xls,Allfiles(*.*),*.*")
示例:
flag=FalseDoWhileNotflag'循环要求必须输入文件名或选择文件名fm=Application.GetSaveAsFilename(fileFilter:
="Excelfiles(*.xls),*.xls,Allfiles(*.*),*.*")
Iffm<>FalseThenactiveworkbook.SaveAsfm'当前活动工作簿另存flag=TrueEndIfLoop
三.关闭
1.单个文件关闭Workbooks("filename.xls").Close2.所有该Excel程序打开的文件都关闭Workbooks.Close
如果文件使用中改动过内容,那么该命令使用时会弹出提示对话框,询问是否保存.
如果要想不弹出提示对话框,可以使用第三或第四种文件关闭方法,或者如下示例.
示例: