第二章、vb6的函数与过程

日期:2021年04月25日
作者:Commas
注释:网络上没有一个比较系统的VB6或者VBA的教程,于是打算利用中午休息的时间写一写这方面的教程,不喜欢写得很文绉绉,一切都以常用为前提进行介绍。因为要覆盖更多读者,所以本系列文章有些地方可能会介绍比较地通俗易懂,当然也会包含一些比较有意思的知识点,不喜勿喷,有问题敬请指出,有疑惑欢迎留言,大家一起讨论,共同进步,谢谢大家(^ _ ^) (^ _ ^)


目录

文章目录

  • 一、前言
  • 二、有关于函数或过程的关键字
  • 三、过程 Sub
    • 1)无参过程 Sub
    • 2)带参过程 Sub
  • 四、函数 Function
    • 1)无参函数
    • 2)带参函数


一、前言

相信接触过其他语言的小伙伴们,最熟悉不过的就是函数;而在VB6中,我们所熟知的所谓函数一分为二——函数与过程,如下图所示:
第二章、vb6的函数与过程_第1张图片

过程:一定没有返回值;
函数:一般有返回值,也允许没有返回值;

二、有关于函数或过程的关键字

声明函数或过程之前,我们先要了解一些有关于函数或过程的关键字,具体如下表所示:

修饰符 说明
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一定是最后面的参数,不可以写在ByValByRef之前;

示例如下:

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一定是最后面的参数,不可以写在ByValByRef之前;

示例如下:

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一定是最后面的参数,不可以写在ByValByRef之前;

阶层(factorial)的知识点加油站:
第二章、vb6的函数与过程_第2张图片


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/116052115

你可能感兴趣的:(VB6,Commas随笔,vb6,函数,ByVal,ByRef,Optional)