1 sub的三种调用方式
- 直接调用 sub名
- call sub名
- Application.Run sub名
2 sub /function 调用时需要注意
- 不能让sub名赋值,但是 functionname可以的
- 没有赋值的变量可以直接表达式运算,但默认为0值
- Public a, b这种语句不能写在sub内,只能放在模块脚本最前面,只能定义,赋值只能在内部
- 封装意义,只能调用 过程和函数,不能调用其内部的变量
Public a, b, c, d
Sub sub1(ByRef a, ByRef b)
c = 1
d = 2
sum1 = a + b + 10
Debug.Print "sum1=" & sum1
End Sub
Sub sub2()
Call sub1(4, 5)
sum2 = c * d * 10
sum3 = a * b * 10
Debug.Print "sum2=" & sum2
Debug.Print "sum3=" & sum3
End Sub
Rem 不能让sub名赋值 functionname可以的
Rem 没有赋值的变量可以直接表达式运算,但默认为0值
Rem Public a, b这种语句不能写在sub内,只能放在模块脚本最前面,只能定义,赋值只能在内部
Rem 封装意义,只能调用 过程和函数,不能调用其内部
3 调用 sub / function 原则总结
- 如果调用sub
- 如果0个或1个参数,可以直接调用不用call, 也不需要()
- 如果参数>=2, 则必须用call调用,必须带()
- 如果调用 function 时
- 如果是直接调用函数名,带结果参数,都可以不需要加()
- 如果是用call调用函数,必须加()
debug.print 函数名
- call 或 函数名调用,都只运行代码,但不会得到函数本身的返回值
- 只用调用函数名,才会有函数本身的返回值
Sub test100()
test11
test12 2
Call test12(2)
Call test13(1, 2, 3)
Debug.Print
Debug.Print func11
Debug.Print func12(2)
Debug.Print func13(1, 2, 3)
Debug.Print
Call func11
Call func12(2)
Call func13(1, 2, 3)
Debug.Print
func11
func12 2
func13 1, 2, 3
Debug.Print
End Sub
Sub test11()
Debug.Print "test11"
End Sub
Sub test12(x)
Debug.Print x * x
End Sub
Sub test13(x, y, z)
Debug.Print x + y + z
End Sub
Function func11()
func11 = "func11"
Debug.Print "func11测试"
End Function
Function func12(x)
func12 = x * x
Debug.Print "func12测试"
End Function
Function func13(x, y, z)
func13 = 2 * (x + y + z)
Debug.Print "func13测试"
End Function
3.1 当调用的sub 或function 不带参数时
- 调用时,可以带call 或不call 开头
- 用call调用,因为没参数 call func1() 会被编辑器自动变成 call func1
- 直接调用, 正确写法写func1, 如果func1()----会错误 不能带括号
Public a, b, c, d
Sub sub1()
Call func1 '或 func1 但不能func1() 或 call func1()被自动变为 call func1
End Sub
Function func1()
a = 1
b = 2
func1 = 1 + 2
Debug.Print "func1=" & func1
End Function
3.2 当调用sub 或 function带1个参数
- 调用时,可以带call 或不call 开头
- 如果是用call function_name, 参数必须带括号
- 如果是用 function_name,参数可以不带括号
Public a, b, c, d
Sub sub1()
func1 (3) '或 func1 3
End Sub
Function func1(c)
a = 1
b = 2
func1 = 1 + 2 + c
Debug.Print "func1=" & func1
End Function
Public a, b, c, d
Sub sub1()
Call func1(3)
End Sub
Function func1(c)
a = 1
b = 2
func1 = 1 + 2 + c
Debug.Print "func1=" & func1
End Function
3.3 当调用sub 或 function带2个或以上参数
- 调用时,可以带call 或不call 开头
- 如果调用时使用call 参数必须带括号
- 如果调用时,直接调用,参数可不带括号
Public a, b, c, d
Sub sub1()
Call func1(3, 4, 5) 或 func1 3,4,5
End Sub
Function func1(c, d, e)
a = 1
b = 2
func1 = 1 + 2 + c + d + e
Debug.Print "func1=" & func1
End Function