世界杯logo

【原创】VBA学习笔记(25)sub和function 调用方法

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