【原创】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 
  1. 如果0个或1个参数,可以直接调用不用call, 也不需要()
  2. 如果参数>=2, 则必须用call调用,必须带()

 

  • 如果调用 function 时
  1. 如果是直接调用函数名,带结果参数,都可以不需要加()
  2. 如果是用call调用函数,必须加()

debug.print 函数名

  1. call 或 函数名调用,都只运行代码,但不会得到函数本身的返回值
  2. 只用调用函数名,才会有函数本身的返回值

 

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


 

 

 

 

  • 11
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值