ExcelVBA之快速上手Word文档格式.docx
- 文档编号:22208486
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:69
- 大小:208.74KB
ExcelVBA之快速上手Word文档格式.docx
《ExcelVBA之快速上手Word文档格式.docx》由会员分享,可在线阅读,更多相关《ExcelVBA之快速上手Word文档格式.docx(69页珍藏版)》请在冰豆网上搜索。
第三章ExcelVBA高级使用
第一节WinAPI的使用
1)堀明API函数
2)使用API函数
3)堀明补充说明
4)实例
第二节ExcelVBA程序的保密
1)使用动态连接库DLL
2)获得硬盘物理地址
3)加密与注册
第四章ExcelVBA优化及结束语
第一节ExcelVBA优化
第二节结束语
附录IExcelVBA对象框架图
第一章VBA语言基础
一.定义
标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成对变量、常
量、过程、函数、类等的引用。
二.命名规则
1)字母打头,由字母、数字和下划线组成,如A987b_23Abc
2)字符长度小于40,(Excel2002以上中文版等,可以用汉字且长度可达254个字符)
3)不能与VB保留关键字重名,如public,private,dim,goto,next,with,integer,single等
定义:
运算符是代表VB某种运算功能的符号。
1)赋值运算符=
2)数学运算符&
、+(字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)
3)逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含)
4)关系运算符=(相同)、<
>
(不等)、>
(大于)、<
(小于)、>
=(不小于)、<
=(不大于)、Like、Is
5)位运算符Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含)
VBA共有12种数据类型,具体见下表,此外用户还可以根据以下类型用Type自定义数据类型。
数据类型
类型标识符
字节
字符串型String
$
字符长度(0-65400)
字节型Byte
无
1
布尔型Boolean
2
整数型Integer
%2
长整数型Long
&
4
单精度型Single
!
双精度型Double
#8
日期型Date
8公元100/1/1-9999/12/31
货币型Currency
@8
小数点型Decimal
14
变体型Variant
以上任意类型,可变
对象型Object
4
1)VBA允许使用未定义的变量,默认是变体变量。
2)在模块通用说明部份,加入OptionExplicit语句可以强迫用户进行变量定义。
3)变量定义语句及变量作用域Dim变量as类型'
定义为局部变量,如Dimxyzasinteger
Private变量as类型'
定义为私有变量,如Privatexyzasbyte
Public变量as类型'
定义为公有变量,如Publicxyzassingle
Global变量as类型'
定义为全局变量,如Globlalxyzasdate
Static变量as类型'
定义为静态变量,如Staticxyzasdouble一般变量作用域的原则是,那部份定义就在那部份起作用,模块中定义则在该模块那作用。
4)常量为变量的一种特例,用Const定义,且定义时赋值,程序中不能改变值,作用域也如同变量作用域。
如下定义:
ConstPi=3.1415926assingle
第五节数组
数组是包含相同数据类型的一组变量的集合,对数组中的单个变量引用通过数组索引下标进行。
在内存中表现为一个连续的内存块,必须用Global或Dim语句来定义。
定义规则如下:
Dim数组名([lowerto]upper[,[lowerto]upper,….])astype;
Lower缺省值为0。
二维数组是按行列排列,如XYZ(行,列)。
除了以上固定数组外,VBA还有一种功能强大的动态数组,定义时无大小维数堀明;
在程序中再利用
Redim语句来重新改变数组大小,原来数组内容可以通过加preserve关键字来保留。
如下例:
Dimarray1()asdouble:
Redimarray1(5):
array1(3)=250:
Redimpreservearray1(5,10)
1)注释语句是用来说明程序中某些语句的功能和作用;
VBA中有两种方法标识为注释语句。
9单引号’;
如:
’定义全局变量;
可以位于别的语句之尾,也可单独一行
9Rem;
Rem定义全局变量;
只能单独一行2)赋值语句是进行对变量或对象属性赋值的语句,采用赋值号=,如X=123:
Form1.caption=”我的窗口”对对象的赋值采用:
setmyobject=object或myobject:
=object
1)VBA不区分标识符的字母大小写,一律认为是小写字母;
2)一行可以书写多条语句,各语句之间以冒号:
分开;
3)一条语句可以多行书写,以空格加下划线_来标识下行为续行;
4)标识符最好能简洁明了,不造成歧义。
1)If…Then…Else语句
IfconditionThen[statements][Elseelsestatements]如1:
IfA>
BAndC<
DThenA=B+2ElseA=C+2
如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
Loop或者使用下面语法Do'
先do再判断,即不论如何先干一次再说
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按值传递,未改变原值
二.Function函数
函数实际是实现一种映射,它通过一定的映射规则,完成运算并返回结果。
参数传递也两种:
按值传
递(ByVal)和按地址传递(ByRef)。
Functionpassword(ByValxasinteger,byrefyasinteger)asboolean
Ify=100theny=x+yelsey=x-yx=x+100ify=150thenpassword=trueelsepassword=false
EndFunction
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),包含一个整数,代表某个日期是星期几
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(*.*),*.*"
循环要求必须输入文件名或选择文件名fm=Application.GetSaveAsFilename(fileFilter:
Excelfiles(*.xls),*.xls,Allfiles(*.*),*.*"
FalseThenactiveworkbook.SaveAsfm'
当前活动工作簿另存flag=TrueEndIfLoop
三.关闭
1.单个文件关闭Workbooks("
filename.xls"
).Close2.所有该Excel程序打开的文件都关闭Workbooks.Close
如果文件使用中改动过内容,那么该命令使用时会弹出提示对话框,询问是否保存.
如果要想不弹出提示对话框,可以使用第三或第四种文件关闭方法,或者如下示例.
关闭
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ExcelVBA 快速 上手