VB备忘录(6)过程与函数

三种:

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值