vb中function和sub的区别
3个回答
展开全部
function是函数,sub是子程序,都可以传递参数,但函数有返回值,子程序没有
function 可以用自身名字返回一个值,sub 需定义别的变量,用传址方式传回值。
Sub 过程与Function 过程的区别:
1. Sub 过程定义时无需定义返回值类型,而Function 过程一般需要用“As 数据类型” 定义函数返回值类型。
2. Sub 过程中没有对过程名赋值的语句,而Function 过程中一定有对函数名赋值的语句。
3. 调用过程:调用 Sub 过程与 Function 过程不同。调用 Sub 过程的是一个独立的语句,而调用函数过程只是表达式的一部分。Sub 过程还有一点与函数不一样,它不会用名字返回一个值。但是,与 Function过程一样,Sub 过程也可以修改传递给它们的任何变量的值。
4. 调用 Sub 过程有两种方法:
以下两个语句都调用了名为 MyProc 的 Sub 过程。
Call MyProc (FirstArgument, SecondArgument)
MyProc FirstArgument, SecondArgument
注意当使用 Call 语法时,参数必须在括号内。若省略 Call 关键字,则也必须省略参数两边的括号。
function 可以用自身名字返回一个值,sub 需定义别的变量,用传址方式传回值。
Sub 过程与Function 过程的区别:
1. Sub 过程定义时无需定义返回值类型,而Function 过程一般需要用“As 数据类型” 定义函数返回值类型。
2. Sub 过程中没有对过程名赋值的语句,而Function 过程中一定有对函数名赋值的语句。
3. 调用过程:调用 Sub 过程与 Function 过程不同。调用 Sub 过程的是一个独立的语句,而调用函数过程只是表达式的一部分。Sub 过程还有一点与函数不一样,它不会用名字返回一个值。但是,与 Function过程一样,Sub 过程也可以修改传递给它们的任何变量的值。
4. 调用 Sub 过程有两种方法:
以下两个语句都调用了名为 MyProc 的 Sub 过程。
Call MyProc (FirstArgument, SecondArgument)
MyProc FirstArgument, SecondArgument
注意当使用 Call 语法时,参数必须在括号内。若省略 Call 关键字,则也必须省略参数两边的括号。
展开全部
其实这个问题我以前也想过,但是没有仔细梳理。我认为,两者没有本质的区别,同样一个任务,两者都能完成。比如:
Private Sub Command1_Click()
Sub2
End Sub
Private Sub Command2_Click()
Fun2
End Sub
Private Sub Sub2()
MsgBox "其实,函数与过程是没有本质区别的!"
End Sub
Private Function Fun2()
MsgBox "其实,函数与过程是没有本质区别的!"
End Function
两者运行结果是相同的。但是好像又有些区别。比如:
Private Sub Sub1(IntSs As Long, BSsYN As Boolean)
Dim I As Long, J As Long
BSsYN = True
For I = 2 To Sqr(IntSs)
If IntSs Mod I = 0 Then
BSsYN = False
Exit Sub
End If
Next I
End Sub
Private Function Fun1(IntSs As Long) As Boolean
Dim I As Long, J As Long
Fun1 = True
For I = 2 To Sqr(IntSs)
If IntSs Mod I = 0 Then
Fun1 = False
Exit Function
End If
Next I
End Function
Private Sub Command3_Click()
Dim BSsYesNo As Boolean
Sub1 25, BSsYesNo
If BSsYesNo Then MsgBox 25 & "是素数" Else MsgBox 25 & "不是素数"
Sub1 47, BSsYesNo
If BSsYesNo Then MsgBox 47 & "是素数" Else MsgBox 47 & "不是素数"
End Sub
Private Sub Command4_Click()
If Fun1(25) Then MsgBox 25 & "是素数" Else MsgBox 25 & "不是素数"
If Fun1(47) Then MsgBox 47 & "是素数" Else MsgBox 47 & "不是素数"
End Sub
这两者运行的结果也是一样的,但是,好像函数的调用更为方便些。我有这样一个认识,函数比过程更强大些。
Private Sub Command1_Click()
Sub2
End Sub
Private Sub Command2_Click()
Fun2
End Sub
Private Sub Sub2()
MsgBox "其实,函数与过程是没有本质区别的!"
End Sub
Private Function Fun2()
MsgBox "其实,函数与过程是没有本质区别的!"
End Function
两者运行结果是相同的。但是好像又有些区别。比如:
Private Sub Sub1(IntSs As Long, BSsYN As Boolean)
Dim I As Long, J As Long
BSsYN = True
For I = 2 To Sqr(IntSs)
If IntSs Mod I = 0 Then
BSsYN = False
Exit Sub
End If
Next I
End Sub
Private Function Fun1(IntSs As Long) As Boolean
Dim I As Long, J As Long
Fun1 = True
For I = 2 To Sqr(IntSs)
If IntSs Mod I = 0 Then
Fun1 = False
Exit Function
End If
Next I
End Function
Private Sub Command3_Click()
Dim BSsYesNo As Boolean
Sub1 25, BSsYesNo
If BSsYesNo Then MsgBox 25 & "是素数" Else MsgBox 25 & "不是素数"
Sub1 47, BSsYesNo
If BSsYesNo Then MsgBox 47 & "是素数" Else MsgBox 47 & "不是素数"
End Sub
Private Sub Command4_Click()
If Fun1(25) Then MsgBox 25 & "是素数" Else MsgBox 25 & "不是素数"
If Fun1(47) Then MsgBox 47 & "是素数" Else MsgBox 47 & "不是素数"
End Sub
这两者运行的结果也是一样的,但是,好像函数的调用更为方便些。我有这样一个认识,函数比过程更强大些。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数允许带个返回值,过程没有。
function sum(a,b) as integer
sum=a+b
end function
sub就不行了,只能执行一堆语句而没有带回的值。
function sum(a,b) as integer
sum=a+b
end function
sub就不行了,只能执行一堆语句而没有带回的值。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询