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