Sub过程作为我们每次编写VB程序时总是会出现的一个程序,那你知道它到底是什么吗?你在编写代码时有没有遇到过这样的问题:多个事件过程需要执行同一段相同的代码,那有没有什么办法能够让它只编写一次,但其他事件也都可以使用呢?今天来好好研究研究吧!

 

什么是Sub过程?

也称子过程

 

Sub过程的声明

[Private|Public][Static] Sub <过程名> ([参数表])

          过程体

          [Exit Sub]

End Sub

  • Private,只在过程所在的模块(如窗体模块)中的过程才能调用该过程;
  • Public,应用程序中的任何地方都可以调用该通用过程。默认;
  • Static,该过程中的局部变量是静态变量,调用结束后值仍然保留。也就是说,static当对它进行更改之后,再次调用它时,那么他的值还是保持上一次运行的值
  • 参数表是用来指明调用该Sub过程时需要传递给该过程的参数及类型。表内的参数称为形参。Sub过程可以没有形参(但小括号不可以省略),也可1到多个形参(多个之间用逗号隔开);
  • 在过程中加入exit sub语句提前退出过程

上述中讲到了一个形参的概念:形参是在Sub、Function过程的定义中出现的变量名。本质上一个名字,不占用内存空间,当他只有在被Function过程(函数)调用了才能进行运算、赋值。之后的博客还会详细讲到。

 

适用范围

窗体模块(.Frm)中,标准模块(.Bas)中

 

建立

我这里会讲到三种方法来建立Sub过程

1.选择“工具”菜单中“添加模块”命令,新建一个标准模块即可编辑sub过程

2.“工具”菜单中“添加过程”命令,填上想要创建的Sub过程名,类型选择子程序

3.对象框中选择“通用”项,输入Sub过程头+过程名,按回车键

Sub过程_内存空间

调用

1.使用Call语句。   Call<过程名> ([实参表])

注:实参个数与形参个数必须相等

2.直接使用过程名    <过程名> [<实参表>]

Private Sub Form_Click()
FontSize = 20
Call test '使用Call语句调用过程
test '使用过程名调用过程
End Sub

Sub test() '声明没有形参的Substr过程
Print "我是大美女"
End Sub

上面这段代码中我分别使用了两种方法调用,不管你想使用哪种都可以,但他们还有个小小区别需要你注意:当使用过程名调用过程时,可以省略括号和Call

 

什么时候使用?

多个事件过程需要执行同一段相同的代码。如下代码是分别对1-10和1-100的累加的实现方法:

Sub过程_Public_02

'-----------------------------------------------
'不使用Sub过程的程序代码
'-----------------------------------------------

Private Sub Command1_Click()
Dim a%, b%, total
total = 0
For i = 1 To 10 '1-10的累加
total = total + i
Next
Print "1+2+...+10="; total
End Sub

Private Sub Command2_Click()
Dim a%, b%, total
total = 0
For i = 1 To 100 '1-100的累加
total = total + i
Next
Print "1+2+...+100="; total
End Sub

那如果使用了Sub过程实现是什么样的呢?

'-----------------------------------------------
'使用Sub过程
'-----------------------------------------------

Private Sub Command1_Click()
Dim i%, total!
Call fact(10, total)
Print "1+2+...+10=" & total
End Sub

Private Sub Command2_Click()
Dim i%, total!
Call fact(100, total)
Print "1+2+...+100=" & total
End Sub

Sub fact(n%, total!)
Dim i%
total = 0
For i = 1 To n
total = total + i
Next
End Sub

从第一段代码我们就可以很明显的看出来,在Command1和Command2都使用相同的Click事件求累加和的代码,是不是看起来很重复,但如果我们使用Sub过程来编写是不是减少了这种重复性,提高了代码的可重用性呢?

 

从上面我分别对“使用Sub过程”和“不使用Sub过程”的介绍,你是不是对“过程”这一概念面纱下的神秘越来越感兴趣了呢?这就是代码的神奇魅力!