三种:
sub过程: 无返回值
Function: 有返回值
Property属性过程: 返回并指定值,以及设置对象引用。
Call调用过程
Call 过程名(参数列表)
参数列表,多个时用逗号隔开,为整个数组时,用数组名和空括号组成(如:a( ))
Function过程,最后返回值需给过程名赋值,因此在定义时,过程最后须指定其值。
Private Function SqrA(x As Double) As Double '参数x,返回类型double
If x < 0 Then
Exit Function
Else
SqrA = Sqr(x) ' 过程名赋值
End If
End Function
Property属性过程
[ Public | Private | Friend ] [Static] Property Get 过程名(参数列表) as 类型
Public: 所有模块的所有过程可访问Get过程。若包含在Option Private的模块中,则在其模块外不可访问
Private: 仅在声明的模块内访问
Friend:仅类模块中使用,在整个工程可见,但对实例化对象不可见。
Static:保留过程的局部变量,对Get外的同名声明及使用不会产生影响
同上:Property Let 过程名(参数列表或值)
Property Set 过程名(参数列表或 引用)
参数传递的变化,按值或按址:ByVal ,ByRef
VB默认是按址传递(这与C/C++是不同的)
Private Sub Command1_Click()
Dim c As Integer, b As Integer
c = 3
b = a(c)
Print c '显示4,说明按址传递,会改变原来的值(3)
End Sub
Function a(x As Integer) As Integer
x = x + 1 '由3变成了4
a = x
End Function
可选参数:过程中参数个数是被固定了的,但可以省略其中的参数,用Optional来标明,但只能位于参数列表最后
private sub ABS(option x)
IsMissing(x) ' 返回boolean型,判断是否省略了参数x,为真省略了,为假没有省略
end sub
可变参数:过程中参数个数是可变的,用paramArray来标明,只能位于参数最后,它是一个Variant型的数组,不可与byval,byref,optional一起使用。
Private Sub Command1_Click()
A 1, 2, 3, 4, 5, 9, 7 '参数个数可变
End Sub
Function A(ParamArray x() As Variant) As Integer '需声明为变体数组,paramarray不可少
Dim i As Integer
For i = 0 To UBound(x, 1)
Print x(i);
Next i
End Function
数组作为参数:用空括号来标明传递的是数组,同样是按址传递,注意是因空括号没上下标,故过程中可用Ubound和Lbound来取得
递归:有两个关键点必须写出,1、出口即最后为1或0或者其它情况时是个什么值,2、公式,调用自己的公式要表达清楚。
sub main() 同C/C++一样是程序的入口,为啥加sub,因为VB的入口有两个,一个直接是窗体,另一个就是它main。当然只有sub适合,难道你用function??
当然一个工程只能有一个sub main,否则会弹出二义性错误
通过工程-》工程属性-》启动对象,可以设置是从窗体入口还是main入口,当然你用了main一般都是用它(否则你添加它有啥用呢?)
添加方法:通过添加标准模块,在标准模块中进行手动输入代码即可。
内部函数:
数学
函数名 返回类型 说明
abs(param) 同param 绝对值
Atn(param) double 反正切
Cos(param) double 余弦 注:同上是弧度,cos(3.14/180*60) 60度的余弦
Exp(param) double e某次方
Log(param) double 自然对数
Rnd(param) single [0,1)随机数 注意:隐形转换成整数时会四舍五入
Sgn(param) Variant(Integer) 返回符号,-1,0,1
Sin(param) double 正弦
Sqr(param) double 平方根
Tan(param) double 正切
int(param) integer 取整(小于param的整数)
fix(param) integer 取整(直接舍去小数,-3.25结果就是-3,注意int则是-4,它们就负数时这点区别)
字串
Instr variant(long) 从某位置起在字串中查找子串的位置 InStr([start,] string1, subStr[, compare])
instrRev 同上,从字串后部开始, InstrRev(string1, substr[, start[, compare]])
split(string,分隔符,元素个数) 返回数组 把字串分割
join(一维数组,分隔符) 同上相反,把字串连接,把分隔符隔开,“”时无缝连接
left(字串,N) 左边N个字符
right(字串,N)右边N个字符
Ltrim(string) 去掉左边空格
Rtrim(string) 右
Trim(string) 去掉两边空格
Mid(string,start,length) 取起始start长度为length的子串,省略length则至末尾
Replace(string, substr, replaceStr[, start[, count[, compare]]]) 用replacestr替换string中的substr,start位置,count替换次数,-1是全替换
space(N) 产生N个空格
strcomp(str1,str2,comp) 比较两字串大小,-1小于,0等于 ,1大于,compare默认二进制
strReverse(str) 字串反序排列
转换
asc(字符)转ASC码
chr(数值) 把数值转字符
Hex 十进制转十六进制
Oct 十进制转八进制
Lcase 转小写
Ucase 转大定
Val 数值字符转数值
Str 数值转数值字符
判断
Eof(文件号) end of file
IsArray(变量名) is array
IsNuLL 是否为空
IsNumeric 是否数值型
IsObject 是否对象
日期
Date 返回年月日的日期
DateSerial 返回年月日的Variant(Date)型数据 DataSerial(2009,2,19) 即2009-2-19
DateValue 同上,将参数返回Variant(Date)型数据 dateVal("2010,8,20") 即:2010-8-20
Day month year 三个函数 day("2009-2-19") 19
weekday 返回星期代号,周日为1,周一为2.。。。 weekday("2009-2-19") 返回5(即星期四)
weekdayName 将上面代号转为星期名 weekdayname(5) 返回 星期四
Now 返回日期和时间
time 返回时间
格式化,重点难点
格式化日期时间
now=2009-2-19 13:43:10
format(now,"ddddd-am/pm/hh:mm:ss")
format(now,"d") 返回日期19
......................"dd" 与d同,用两位显示日期,不足用0填充
format(now,"ddd") 返回英文星期 Thu
.................... "dddd" 星期英文全称
format(now,"ddddd“) 返回完整日期 2009-2-19
...................."dddddd" 用汉字显示全日期2009年2月19日
format(now,”w") 返回星期代号1-7, “5” (周四)
......................."ww" 一年中第几个星期(1-53)
format(now,"m") 月份(1-12) 2
....................."mm" 两位显示月份,不足用0补位
format(now,"mmm") 月份英文缩写(Jan-dec) feb
......................"mmmm" 月份英文全称
format(now,"y") 返回一年中第几天(1-366) 50
......................."yy" 年份最末两位(00-99)
................... "yyyy" 返回年份(100-9999)
...................."h" 返回小时(0-23)
...................."hh" 两位显示小时
...................."hm" 返回分(0-59) 注意与前面m的区别
...................."hhmm" 两位的分
.................. "s" 秒(0-59)
...................."ss" 两位显示秒
....................."A/P" a/p或A/P在上午或下午前加字符
...................."AM/PM" AM/PM或am/pm ,同上
符号 - / : 与非类型说明符在返回时,原样返回
格式化字串
format(3,"00") 0占位符 返回”03“
format(3.10,"##.##") #省略符(省略前后0) 返回”3.1“
点号,分号照样 format(1024,"0,000.00" 返回”1,024.00“
%末尾加 format(0.6414,"##.##%") 返回 ”64.14%“
$数值前加 format(35.26,"$##.##") 返回”$35.26"
+ - 数值前加符号 format(-3.1415,"+##.####") 返回 “-+3.1415”
E+,E- 指数表示 format(34145,"0.0000E+00") "3.4145e+04
format(34145,"0.0000e-00") “3.4145e04”
特殊格式化:
format("ABC","<") 转为小写 “abc”
format("abc",">") 转为大小 “ABC”
format("abc","@@@@@") 当字符位数小于后面占位时用空格补充。 “ abc"
format(""abc","&&&&&") 与上面相反,不补充 ”abc“
shell(外部程序,窗体样式) 异步进行,调用的程序按”窗体样式“显示
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Command1_Click()
Dim strtemp As String * 60
Dim L As Integer
L = GetSystemDirectory(strtemp, Len(strtemp))
Dim strpath As String
strpath = Left(strtemp, L) & "\NOTEPAD.Exe"
Dim ret As Integer
ret = Shell(strpath, 6)
End Sub
PP127