日期:2021年04月25日
作者:Commas
注释:网络上没有一个比较系统的VB6或者VBA的教程,于是打算利用中午休息的时间写一写这方面的教程,不喜欢写得很文绉绉,一切都以常用为前提进行介绍。因为要覆盖更多读者,所以本系列文章有些地方可能会介绍比较地通俗易懂,当然也会包含一些比较有意思的知识点,不喜勿喷,有问题敬请指出,有疑惑欢迎留言,大家一起讨论,共同进步,谢谢大家(^ _ ^) (^ _ ^)
目录
一、前言
相信接触过其他语言的小伙伴们,最熟悉不过的就是函数
;而在VB6中,我们所熟知的所谓函数
一分为二——函数与过程,如下图所示:
过程
:一定没有返回值;
函数
:一般有返回值,也允许没有返回值;
二、有关于函数或过程的关键字
声明函数或过程之前,我们先要了解一些有关于函数或过程的关键字,具体如下表所示:
修饰符 | 说明 |
---|---|
Public | 声明公开 的过程或者函数,本模块可以调用,其它模块也可以调用 |
Private | 声明私有 的过程或者函数,仅限本模块调用 |
ByVal | 表示修饰的参数按值传递 |
ByRef | 表示修饰的参数按地址传递,ByRef是VB的缺省选项 |
Optional | 表示修复的参数是可选参数,在调用函数或过程可填可不填,一般位于最后的参数 |
1、窗体Form、模块Module以及类模块Class等等,都称之为以上我们所说的“模块”;
2、值得指出的是,对象一定要用ByRef传递,传递地址(引用),操作同一块内存空间,即同一个对象;
三、过程 Sub
1)无参过程 Sub
语法如下:
[Public\Private] Sub subName
'过程逻辑写在这儿
End Sub
如果过程Sub前面没有写关键字,那么缺省值为
Public
;
不过还是比较建议不要省略,好的习惯,是好的代码的开始;
示例如下:
Option Explicit
Private Sub Form_Load()
On Error Resume Next
'调用过程
Call sayHelloVB
Call sayGoodMorning
End Sub
'定义私有无参过程:仅本模块可调用
Private Sub sayHelloVB()
On Error Resume Next
MsgBox "Hello VB6"
End Sub
'定义公开无参过程:其它模块也可以调用
Public Sub sayGoodMorning()
On Error Resume Next
MsgBox "Good Morning"
End Sub
2)带参过程 Sub
语法如下:
[Public\Private] Sub subName(ByVal p1 As 变量类型, ByRef p2 As 变量类型, Optional p3 As 变量类型 = 默认值)
'过程逻辑写在这儿
End Sub
参数可以是一个或者很多个,根据自己的需求进行前缀修饰;
对象的传递,一定是ByRef
,其它基本上都可以使用ByVal
;
Optional
一定是最后面的参数,不可以写在ByVal
或ByRef
之前;
示例如下:
Option Explicit
Private Sub Form_Load()
On Error Resume Next
'调用过程
Call sayHelloVB("张三")
'1)不传参调用
Call sayGoodMorning
'2)传参调用
Call sayGoodMorning("李四")
Call sayMe("王五", "打篮球")
End Sub
'定义私有无参过程:仅本模块可调用
Private Sub sayHelloVB(ByVal sName As String)
On Error Resume Next
MsgBox "Hello VB6,我是" & sName
End Sub
'定义公开无参过程:其它模块也可以调用
Public Sub sayGoodMorning(Optional sName As String = "")
On Error Resume Next
Dim sMSG As String
sMSG = "早上好"
If sName <> "" Then
sMSG = sName & "," & sMSG
End If
MsgBox sMSG
End Sub
'定义公开无参过程:其它模块也可以调用
Public Sub sayMe(ByVal sName As String, ByVal sHobboy As String, _
Optional sSex As String = "男")
On Error Resume Next
Dim sMSG As String
sMSG = "大家好,我是{0},性别{1},爱好{2}"
sMSG = Replace(sMSG, "{0}", sName)
sMSG = Replace(sMSG, "{1}", sSex)
sMSG = Replace(sMSG, "{2}", sHobboy)
MsgBox sMSG
End Sub
四、函数 Function
1)无参函数
语法如下:
[Public\Private] Function functionName() As 函数返回值的变量类型
'函数逻辑写在这儿
functionName = 函数返回值
End Function
如果函数Function前面没有写关键字,那么缺省值为
Public
;
不过还是比较建议不要省略,好的习惯,是好的代码的开始;
另外,函数的返回值类型是需要指定的;
示例如下:
Option Explicit
Private Sub Form_Load()
On Error Resume Next
'调用函数,不接收返回值
Call sayHelloVB
'调用函数,接收返回值
Dim pIsOK As Boolean
pIsOK = sayHelloVB
Debug.Print pIsOK
End Sub
'定义私有无参函数:仅本模块可调用
Private Function sayHelloVB() As Boolean
On Error Resume Next
MsgBox "Hello VB6,我是" & Me.Text1.Text
If Err <> 0 Then
sayHelloVB = False
Else
sayHelloVB = True
End If
End Function
2)带参函数
语法如下:
[Public\Private] Function functionName(ByVal p1 As 变量类型, ByRef p2 As 变量类型, Optional p3 As 变量类型 = 默认值) As 函数返回值的变量类型
'函数逻辑写在这儿
functionName = 函数返回值
End Function
参数可以是一个或者很多个,根据自己的需求进行前缀修饰;
对象的传递,一定是ByRef
,其它基本上都可以使用ByVal
;
Optional
一定是最后面的参数,不可以写在ByVal
或ByRef
之前;
示例如下:
Option Explicit
Private Sub Form_Load()
On Error Resume Next
'调用函数
Dim dblZ As Double
dblZ = add(1, 2)
Debug.Print dblZ
'1)
dblZ = factorial(-1)
'2)
dblZ = factorial()
Debug.Print dblZ
'3)
dblZ = factorial(0)
Debug.Print dblZ
'4)
dblZ = factorial(4)
Debug.Print dblZ
End Sub
'函数作用:两数求和
'定义私有有参函数:仅本模块可调用
Private Function add(ByVal dblX As Double, ByVal dblY As Double) As Double
On Error Resume Next
add = dblX + dblY
End Function
'函数作用:求阶层
'定义私有有参函数:仅本模块可调用
Public Function factorial(Optional n As Long = 0) As Double
On Error Resume Next
If n < 0 Then
MsgBox "请输入非负数!"
Else
Select Case n
Case 0
'递归出口
factorial = 1
Case Else
'进行递归
factorial = n * factorial(n - 1)
End Select
End If
End Function
参数可以是一个或者很多个,根据自己的需求进行前缀修饰;
对象的传递,一定是ByRef
,其它基本上都可以使用ByVal
;
Optional
一定是最后面的参数,不可以写在ByVal
或ByRef
之前;
阶层(factorial)
的知识点加油站:
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/116052115