VBA中的过程(Procedure)有两种,它们都是一个可以获取参数、执行一系列语句、以及改变其参数的值的独立过程。
Sub test_ponyma1()
sub2 (11)
Call sub1(101, 99) '必须加call,因为不加call这么调用,sub1(101, 99)会和函数搞混
'Debug.Print sub2(12)
Debug.Print func1(222, 333)
End Sub
Sub sub1(a, b)
Debug.Print a + b
End Sub
Function func1(x, y)
func1 = x + y
End Function
Sub sub2(a)
Debug.Print a * a
End Sub
调用其他函数或过程后,实测是一定返回执行后面的语句
Sub sub_main()
Call func1(3, 5)
Debug.Print ("调用函数返回了吗")
End Sub
Function func1(a, b)
func1 = a + b
Debug.Print func1
End Function
特例?
sub是一个最小可执行代码单位,而function是1个“调用代码”的最小可执行单位
特别注意点
Sub s1()
For i = 1 To 3
For j = 1 To 5
Sum = i + j
Debug.Print Sum
Next j
Next i
s1 = Sum '试验,这里会报错,没有函数或变量,也就是sub 不能使用=
End Sub
过程之间可以互相调用
过程和函数之间呢?
Sub s1(i)
Sum = i + 10
Debug.Print Sum
End Sub
Sub s2()
s1 (10)
End Sub
Sub s1(i, j)
Sum = i + j
Debug.Print Sum
End Sub
Sub s2()
s1 (1,3) '2个参数可以定义,但调用时报错,不知道为啥,说缺少= ?
End Sub
Sub s1(i, j)
Sum = i + j
Debug.Print Sum
End Sub
Sub s2()
Call s1(1, 3)
End Sub
搜到一个和我遇到相同的问题---我猜想主要原因,在于不要和数组的写法混淆
https://zhidao.baidu.com/question/1381664585785887220.html
是的,那是我3.3第2段的备注写错了
实际上是这样的
实测 call func 这样的调用,参数必须带括号
而 func 直接这样的写法,多参数不能带括号,但特例是1个参数可带括号或不带
Public a
Public b
Sub s3()
a = 10
b = 20
End Sub
Sub s4()
Sum = a + b
Debug.Print Sum
End Sub
Sub sub_main()
func1
End Sub
Function func1()
Debug.Print ("这个函数没有返回值")
End Function
Sub sub_main()
Call func1(3, 5)
End Sub
Function func1(a, b)
func1 = a + b
Debug.Print func1
End Function
遇到和sub通用的问题,一个参数可以直接 f1()
需要多个参数,必须用call f1()
Function f1(a, b)
Sum = a + b
f1 = Sum
Debug.Print f1
End Function
Function f2()
Call f1(5, 6)
End Function
Sub s1()
Call f2
End Sub
函数名= 可以直接赋值,不需要中转变量
Function f1(a, b)
f1 = a + b
Debug.Print f1
End Function
Function f2()
Call f1(5, 6)
End Function
Sub s1()
Call f2
End Sub
Function func1(a, b)
func1 = a + b
Debug.Print func1
End Function
Function func2()
Cells(1, 3).Value = 111
End Function
http://www.cnblogs.com/wuzhiblog/p/vba_six.html
http://club.excelhome.net/thread-243048-1-1.html