一、概念
Sub 过程 是由 Sub 和 End Sub 语句Visual Basic的一系列 子语句,这些语句执行操作但不返回值。
Function 过程(一般称作函数) 是一系列由 Function 和 End Function 语句包含 的语句。 Function 过程类似于 Sub 过程,但函数也可以返回值。
二、区别
Function |
Sub |
|
|---|---|---|
| 定义(无参数) | ```vbnet |
Public Function sayHello() MsgBox (“Hello World!”) End Function
| ```vbnetPublic Sub sayHello()MsgBox ("Hello World!")End Sub
| | 定义(有参数) | ```vbnet Public Function sayHello(msg) MsgBox (msg) End Function
| ```vbnet
Public Sub sayHello(msg)
MsgBox (msg)
End Sub
| | 调用 | 可在其他函数、过程中调用```vbnet Public Function work() saySomething (“Hello World”) cleanTable End Function
Public Function saySomething(msg) MsgBox (msg) End Function
Public Function cleanTable() MsgBox (“桌面已经收拾完了”) End Function
| 可在其他函数、过程中调用```vbnet
Public Sub work()
Call saySomething("Hello World")
Call cleanTable
End Sub
Public Sub saySomething(msg)
MsgBox (msg)
End Sub
Public Sub cleanTable()
MsgBox ("桌面已经收拾完了")
End Sub
可在“宏”中调用
|
| 是否有返回值 | 有```vbnet
‘尝试运行一下代码,查看d的值
Public Sub calc()
Dim d As Integer
Let d = add(1, 3)
MsgBox (d)
End Sub
Public Function add(a, b) As Integer Dim c As Integer Let c = a + b
add = a + b
End Function
| 无 |
| 是否有返回值的理解 | “狗,去吧垃圾叼到垃圾桶里,之后过来跟我叫两声代表你完成了任务。” | “狗,去吧垃圾叼到垃圾桶里。” |
<a name="ivPsC"></a>
## 三、Public与Private的作用
<a name="tUHKW"></a>
## 
了解`Public`与`Private`前,我们先了解一下我们的代码可以写在哪些地方:
- `Sheet1`:我们会有`Sheet1`、`Sheet2`等`Sheet`,写在其中的`VBA`代码只支持在各自的`Sheet`中使用。
- `ThisWorkbook`:一个工作簿仅有一个,写的其中的代码可在所有Sheet中使用。
- `模块`:会有多个`模块`,如`模块1`、`模块2`等,写在其中的代码可以在`Sheet`与`ThisWorkboox`中使用。
在`Function`与`Sub`中,可以用`Public`与`Private`指定其作用域(即对谁可见,`Public`指谁都可以看;`Private`是私有的,只有内部成员可以看),可通过以下例子进行了解(以下例子写在模块中):
```vbnet
Public Function sayHi1()
MsgBox ("我是公开的,谁都可见")
End Function
Private Function sayHi2()
MsgBox ("我是私有的,只对内部可见")
End Function
Public Function sayHi3()
MsgBox ("我属于内部人员,我可以调用内部的私有函数。但我本身是公开的,可以被其他人调用。接下来我要调用sayHi2了")
sayHi2
End Function
之后通过在Sheet或ThisWorkbook测试其区别:
Public Sub sayHello()
sayHi1
'sayHi2
'sayHi3
End Sub
- 可以运行
sayHi1,因为sayHi1是Public的 - 不可以运行
sayHi2,因为sayHi2是Private的 - 可以运行
sayHi3,因为sayHi3是Public的;sayHi3可以调用sayHi2,因为sayHi3对sayHi2来说不是“外人”问题
- Function和Sub哪一个有返回值?
-
参考
- 在 VBA (编写 Sub) | Microsoft Docs
如果你喜欢我的文章,欢迎来给我买咖啡,而且还可以买不止一杯。

捐赠支持作者!
