打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【烟花原创】VBA零基础之第23篇 细说参数(三)
  今天我们聊聊在过程中参数的两种传递方式。
按值传递:ByVal
将参数值而不是将地址传递给过程的方式,这就使在过程中访问的只是变量的副本
  在过程中修改参数值的时候,其实修改的只是变量的副本的值,从而不会改变变量的真正值。
这里说到的地址,真正值,复本,可能把大家给绕晕了,看个例子。
  Sub Main()
      Dim a As Long
      Dim b As Long
      a= 1: b = 2
      MsgBox prompt:="a=" & a & ",b=" & b,Title:="调用过程前"
      Call ByVal1(a, b)
      MsgBox prompt:="a=" & a & ",b=" & b,Title:="调用过程后"
  End Sub

  Sub ByVal1(ByVal a As Long, ByVal b AsLong)
      MsgBox prompt:="修改a的值=100b的值等于100", Title:="按值传递"
      a= 100
      b= 100
  End Sub
 
 在sub过程Main里声明了ab两个长整型变量,a赋值1b赋值2
 在调用Sub过程ByVal1之前,先通过消息框显示ab的当前值。
 在sub过程ByVal1的声明里,通过使用ByVal 关键字,两个参数都是按值传递。
 在ByVal1过程内修改参数的变量值前先照例通过消息框显示参数变量的值。
 修改完后参数变量的值后,返回到Main过程里继续执行CALL下面的语句。

 这里的难点,就在于理解按值传递时,实际上传递的只是一个复本。
 理论是枯燥的,但是通过代码,大家兴许可以明白些。
 在被调用的过程中,参数变量的值该过程中修改后,在过程结束返回后,相关的变量值没有改变。
按地址传递:ByRef
参数地址而不是将值传递给过程的方式,在过程中访问到实际的变量。
  所以在过程中对参数变量的赋值,都会变量的真正值。
  除非另作说明,否则按地址传递参数。

我们看个例子。
  Sub Main()
      Dim a As Long
      Dim b As Long
      a= 1: b = 2
      MsgBox prompt:="a=" & a & ",b=" & b,Title:="调用过程前"
      Call ByRef1(a, b)
      MsgBox prompt:="a=" & a & ",b=" & b,Title:="调用过程后"
  End Sub

  Sub ByRef1(ByRef a As Long, ByRef b AsLong)
      MsgBox prompt:="修改a的值=100b的值等于100", Title:="按地址传递"
      a= 100
      b= 100
 End Sub

  由于不做说明的情况下,均是按址传递,所以上面的声明Sub ByRef1(ByRef a As Long, ByRef b As Long)也可以改成Sub ByRef1(aAs Long, b As Long)
  另外,在按址传递参数的方式下,传递一个常量值作为参数,即使修改了参数变量的值,也是不会保留的。
  例如 Call ByRef1(1,2)

额外知识点:
 A用户定义类型不能以ByVal的方式传递。

 B.数组中个别的元素可以按ByVal传递,但整个数组必须以ByRef传递
  可以传递括号中的数组参数,或是将它放在 Variant 之中,再将此 Variant 传递至ByVal 参数。
  示例:
  Sub test()
      Dim a As Variant
      Dim b()
      b= Range("a1:c3").Value
      a= b
      Call arr(a)
 End Sub

 Sub arr(ByVal a)
    a(1, 1) = 1
     a(2, 1) = "a"
     a(3, 1) = True
 End Sub
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VB真是想不到系列之二:VB《葵花宝典》--指针技术
sub/function:VBScript 过程
VBA的过程及参数详解
计算机技术基础(第九章 过程 )
vb6.0 判断数组为空
VB程序设计两次习题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服