Visual Basic高手语法整理篇.docx
《Visual Basic高手语法整理篇.docx》由会员分享,可在线阅读,更多相关《Visual Basic高手语法整理篇.docx(17页珍藏版)》请在冰豆网上搜索。
![Visual Basic高手语法整理篇.docx](https://file1.bdocx.com/fileroot1/2022-11/16/aeb26bc1-594f-497b-8dc2-bf1b94934ee1/aeb26bc1-594f-497b-8dc2-bf1b94934ee11.gif)
VisualBasic高手语法整理篇
1分支结构
条件表达式、变量、常数都可以
(1)If条件Then
语句块
EndIf
(2)If条件Then
语句块1
Else
语句块2
EndIf
(3)If条件1Then
语句块1
ElseIf条件2Then
语句块2
ElseIf条件NThen
语句块N
Else
语句块N+1
EndIf
嵌套If语句-------(实际很少用)
(4)If条件1Then
If条件2Then
语句块1-1
Else
语句块1-2
EndIf
其他语句
Else
语句块2
EndIf
(1)SelectCase变量名或表达式
Case表达式1比较具体值是否相等
语句块1相等则执行本语句块
Case表达式2
(1)Case2,4,6,8,10
语句块2
(2)Case1To10
Case表达式N(3)CaseIs>20
语句块N(4)Case"ab","ef"
CaseElse(5)Case"ab"To"ef"
语句块N+1(6)Case2,4,1To10,Is>20,"ab"To"ef"
EndSelect
要点1,Select语句可以嵌套
2,只有当IfElseIf语句中每个表达式都相同时才能用Select语句代替
例:
Sub多重判断()见VBA57页
IfRange(“A1”)<0Then
Range(“B1”)=“小于零”
ElseIfRange(“A1”)=0Then
Range(“B1”)=“等于零”
ElseIfRange(“A1”)>0Then
Range(“B1”)=“大于零”
EndIf
EndSub
Sub多重判断()
SelectCaseRange(“A1”)
CaseIs<0
Range(“B1”)=“小于零”
CaseIs=0
Range(“B1”)=“等于零”
CaseIs>0
Range(“B1”)=“大于零”
EndSelect
EndSub
(2)IIF(条件,条件为真的值,条件为假的值)
若条件为真,则取第一个值(条件为真的值)
否则条件为假,则取第二个值(条件为假的值)
2循环结构
(1)For计数变量名=起始值To终止值Step步进值
语句块步进为1时可省略
Next计数变量名步进值可为正负整数
可省略不写
(2)For计数变量名1=起始值1To终止值1
For计数变量名2=起始值2To终止值2
语句块
Next计数变量名2
其它语句
Next计数变量名1
要点:
1能确定循环终止值时首先确定用ForNext循环
2循环内一般不用修改计数变量的值
3ExitFor语句只能退出当前循环
4第一次进入循环时计数变量会被设定为起始值
(1)Do
语句块
Loop
(2)DoWhile条件表达式
语句块只要条件表达式成立,就继续执行循环
Loop
(3)Do
语句块
LoopWhile条件表达式
只要条件表达式成立,就继续执行循环
(4)Do
语句块
LoopUntil条件表达式
只要条件表达式成立,就退出循环
(5)DoUntil条件表达式
语句块只要条件表达式成立,就退出循环
Loop
(1)DoWhile条件表达式
语句块只要条件表达式成立,就继续执行循环
Loop
While条件表达式
语句块只要条件表达式成立,就继续执行循环
Wend
(2)GoTo标记功能:
可任意前跳后跳
标记:
语句或空白
命名规则与变量相同,汉字串也可以
也可用数字(0--2147483647),此时“:
“可省略
要点:
1可以用ExitDo退出Loop循环(If条件表达式ThenExitDo)
2For循环自带隐含计数器,其它条件循环必须另加计数器I=I+1
(或I=I-1),其它条件循环要在进入循环之前设置计数器初值。
实例《实例150》317、377,《VBA》58页
(3)ForEach个体变量In指定的集合
语句
Next个体变量
3子程序结构
(1)创建子程序:
代码窗口选择"通用"——输入"Sub子程序名"后回车即可。
英文汉字都可以(见VBA)
模块中输入:
PublicSub子程序名()或PrivateSub子程序名()
能被任何位置主程序调用(可省略)只能在同一模块(或同一代码窗口)内调用
(2)最简单调用:
把子程序名当成一个语句即可
(3)主程序格式:
Call子程序名(变量或常数1,变量或常数2,---)
Call子程序名((变量或常数1),(变量或常数2),---)
要点:
1实际参数是常数时,常数直接替代形式参数的值。
2实际参数是变量时,则以变量本身替代形式参数本身。
3变量或常数加上“()”,则以变量的值或常数本身替代形式参数的值。
(4)子程序格式:
Sub子程序名(形式参数1As数据类型1,形式参数2As数据类型2,---)语句块
EndSub
Sub子程序名(Byval(或ByRef)形式参数1As数据类型1,
Byval(或ByRef)形式参数2As数据类型2,---)
语句块
EndSub
例:
PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)(VBA50页)
要点:
1加上Byval后不管主程序什么格式,调用都是传值调用,调用后不会改
变原主程序变量的值。
2加上Byref则是传变量调用,调用后会改变原主程序变量的值。
3注意:
主程序声明的数据类型必须与子程序声明的数据类型一致,否则报错。
4函数结构
(1)创建函数:
代码窗口选择"通用"——输入"Function函数名"后回车即可。
Function函数名()
函数名=表达式函数最后要传回一个值,所以必定有此语句。
EndFunction
Function函数名(形参1,形参2)As数据类型
函数名=表达式
EndFunction声明函数返回值的类型
(2)最简单调用:
(子程序)Call子程序名(变量或常数1,变量或常数2,---)
(函数)V=函数名(变量或常数1,变量或常数2,---)
例:
PublicFunction工作表个数()
工作表个数=ThisWorkbook.Sheets.Count
EndFunction
PublicSub求工作表个数()
DimaAsInteger
a=工作表个数()
MsgBox"工作表个数="&a
EndSub
(3)子程序或函数递归调用——子程序或函数调用自己本身
PrivateSubForm_Load
DimaAsInteger
A=age(5)
Msgbox"第五个人的年龄是"+Str(a)
EndSub
Functionage(nAsInteger)AsInteger
If(n=1)Then
age=10
EndIf
EndFunction
5数组结构
(1)数组的声明:
Dim数组名(N)As数据类型
下标范围是0---N,起始下标是固定值0
Dim数组名(MToN)As数据类型
下界<上界,下标可以是正数,也可以是负数
Dim数组名+数据类型声明符号(N)例如:
DimZ$(9)
下标范围读取:
V1=LBound(数组名)读起始下标
V2=UBound(数组名)读终止下标
数据存取:
数组名后加上“(数据顺序)”,例如:
X(0)=100
要点:
不能一次读取或指定整个数组的数据,如:
DimX(5)AsInteger
X=100错误
(2)动态数组的声明:
ReDim数组名(N)As数据类型
Dim数组名()As数据类型
调整数组大小:
ReDim数组名(MToN)
新的下标范围
ReDimPreserve数组名(MToN)
调整大小时保留数组中的数据
将变量变成数组:
DimX
X=Array("北京","上海","天津")
注意Array函数的传回的值只能指定给不定型变量
(3)二维数组的定义:
含有2个下标的数组称为二维数组
二维数组的声明:
DimX(3,5)As数据类型
行(下标0—3)列(下标0—5)
0列1列2列3列4列5列
0行(0,0)(0,1)(0,2)(0,3)(0,4)(0,5)
1行(0,0)(0,1)(0,2)(0,3)(0,4)(0,5)
2行(0,0)(0,1)(0,2)(0,3)(0,4)(0,5)
3行(0,0)(0,1)(0,2)(0,3)(0,4)(0,5)
数据存取:
要使用2个下标确定行列位置
例:
X(1,2)=0.7Print(3,2)
(4)多维数组的定义:
含有2个以上下标的数组称为多维数组
多维数组的声明:
DimX(1,2,3,...)As数据类型
有几个下标就是几维数组
(4)控件数组:
控件Index属性值就是该控件在数组中的下标
6API函数结构
(1)API函数:
API函数时Windows内部专供应用程序调用的函数
对象属性Hwnd:
不同系统资源唯一的识别码,相当于VB中对象的Name属性
声明位置:
模块通用处用Public声明则其它模块都能调用
窗体通用处只能用Private声明并在本窗体中调用,否则提示“不支持”
kernel