ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 关于参数传递的一些材料和示例分享

关于参数传递的一些材料和示例分享

作者:绿色风 分类: 时间:2022-08-18 浏览:154
楼主
xmyjk
一、形参和实参
实参就是过程或者函数执行过程中传递的值,形参其实就是类似变量名没有具体值,形式上的参数。
例如:
  1. Sub a()
  2. Dim abc
  3. Abc = 100
  4. Call b(abc) ‘传递参数,过程a的的实参100,传递给过程b中的形参i去调用过程b
  5. End sub
  6. Sub b(I)
  7. Debug.print I
  8. End sub


二、形参和实参的结合方式(以sort对象为讲解)
1.按位置结合:range("a1:a5").Sort [a1],xlAscending,,,,,,xlNo。自己琢磨为什么那么多逗号了,因为是按位置结合的。
2.按命名参数方式结合:range("a1:a5").Sort key1:=[a1],order1:=xlAscending,header:=xlNo

三、参数的传递方式
1.按地址来传递,这是VBA默认的方式,大家试看看就知道了。就是传递时候,形参和实参都是指向同一个内存区域,形参操作返回后,值也变了。
  1. Sub test1()
  2. Dim b As Integer
  3. b = 100
  4. Debug.Print "期初test1中b=" & b
  5. Call trans1(b)
  6. Debug.Print "期末test1中b=" & b
  7. End Sub

  8. Sub trans1(a)
  9. a = a + 1
  10. Debug.Print "trans1中a=" & a
  11. End Sub


2.按值来传递:就是,传递时,实参把自己做了个副本,然后传给了形参,并没有把实际地址传给形参。这种方式,需要在形参前面使用BYVAL使用。大家试看看下面的程序:
  1. Sub test2()
  2. Dim b As Integer
  3. b = 100
  4. Debug.Print "期初test2中b=" & b
  5. Call trans2(b)
  6. Debug.Print "期末test2中b=" & b
  7. End Sub

  8. Sub trans2(ByVal a)
  9. a = a + 1
  10. Debug.Print "trans2中a=" & a
  11. End Sub


四、其他
1.可选参数:一般VBA的参数是固定的,但是也有可选参数的情况,如下述过程把,就不废话了
  1. Sub test3()
  2. Dim x, y, z
  3. x = 11: y = 22
  4. Call kexuan(x, y)
  5. x = 111
  6. Call kexuan(x)
  7. End Sub

  8. Sub kexuan(a, Optional b)
  9. Debug.Print a
  10. If Not IsMissing(b) Then
  11. Debug.Print b
  12. End If
  13. End Sub


2.可变参数:参数个数不是固定的,是可变的。
  1. Sub test5()
  2. Dim all
  3. Call jiazong(all, 1, 2, 3)
  4. Debug.Print all
  5. End Sub

  6. Sub jiazong(total, ParamArray nm())
  7. Dim i
  8. For i = LBound(nm()) To UBound(nm())
  9.   total = total + nm(i)
  10. Next
  11. End Sub

示例文件.rar
2楼
supersudda
好好学习一下!支持楼主的分享

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap