城南有诗客
新浪微博
微信
当前位置:城南有诗客网 » 娱乐

VBA 系列教程 | VBA 中调用子过程和函数

本篇是 Excel VBA 系列教程的一部分,后台回复「VBA」获取所有教程。

在程序开发中,把代码拆分成多个子过程和函数,可以使项目更容易管理、测试和运行,VBA 中也不例外。

实际开发中,项目通常具备一个主入口过程,或称为父过程。父过程通过调用多个子过程和函数,完成一系列复杂的操作。其中子过程和函数一般只负责一个操作或动作。

下面看一个简单的例子。

'主入口
Sub Main()
    Dim name As String
    Dim title As String

    name = GetInfo("姓名")
    title = GetInfo("职位")

    WriteInfo name & "," & title
End Sub

'函数,接受信息
Function GetInfo(info As String) As String
    GetInfo = InputBox("请输入" & info)
End Function

'子过程,在工作表A1单元格填写信息
Sub WiteInfo(info As String)
    Range("A1") = info
End Sub

以上的例子中,Main 过程是一个主入口(父过程),程序从此处开始执行,先是通过调用两次 GetInfo 函数获得姓名和职位信息,存储到相应的 nametitle 变量,最后调用 WriteInfo 子过程,将两个信息写到工作表上的 A1 单元格。

注:InpuBox 函数是 VBA 内置函数,用于从用户接受内容。

接下来介绍调用子过程和函数的基本语法。

调用子过程(Sub)

调用子过程有两种方法,直接调用使用 Call 关键词调用。两种方法对子过程的参数有不同的要求。

直接调用

直接调用,直接写过程名,即可调用过程。

Sub Main()
    MySub
End Sub

Sub MySub()
    '代码
End Sub

如果子过程需要输入参数,多个参数只需用逗号(,)分开即可。

Sub Main()
    MySub 2019,"年"
End Sub

Sub MySub(val1 As Integer, val2 As String)
    '代码
End Sub

使用关键词 Call 调用

使用 Call 关键词调用时,Call 后接过程名。

Sub Main()
    Call MySub
End Sub

Sub MySub()
    '代码
End Sub

如果子过程需要输入参数,则需要将参数放在括号内。

Sub Main()
    Call MySub(2019,"年")
End Sub

Sub MySub(val1 As Integer, val2 As String)
    '代码
End Sub

注:程序角度看,调用过程时,不需要使用 Call,因此不建议此种方法。

调用函数(Function)

在上一篇教程说到,函数与子过程的区别是,函数可以返回值。如果一个函数不返回值,它与子过程并无区别,其中调用方式与子过程形同。

调用有返回值的函数时,一般有两种情形:

  • 一是,使用一个变量存储函数返回的值

  • 二是,函数返回的值参与其他计算

两种情形调用函数方式相同,无参数函数直接书写,有参数函数将参数放在括号内

Sub Main()
    '使用变量存储函数返回的值
    Dim result As Double
    result = Add(12345)

    '函数返回值继续参与计算
    Dim result As Double
    result = RandNum + Add(12345)
End Sub

'函数:返回一个随机值
Function RandNum()
    RandNum = Rnd * 100
End Function
'函数:返回两数的和
Function Add(num1 As Double, num2 As Double) As Double
    Add = num1 + num2
End Function

总结

实际开发中,调用子过程和函数是很频繁的,应熟练掌握调用语法。总结下来,调用子过程时,直接写过程名调用,如果有参数,也紧跟过程名后,用逗号分开。(子过程不建议使用 Call 关键词调用)。调用函数时,参数需要放置在括号内部,接函数名后。