第二章、vb6的函数与过程

日期: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一定是最后面的参数,不可以写在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)的知识点加油站:
在这里插入图片描述


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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Commas.KM

码路共同进步,感恩一路有您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值