Ecel VBA编程 传址与传值.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Excel VBA 编程 传址与传值 参数是主调过程和被调过程之间传送数据的重要手段。程序在调用一个有参数的过程时, 要把语句中的“实参”依次传递给被调用过程的“形参”,然后执行被调用过程中的语句。 形参相当于过程中的过程级变量,参数传递相当于给变量赋值。过程结束后,程序返回到调 用它的过程中继续执行。 在 VBA 中,调用过程时的参数传递有两种方式:按值传递(ByVal,简称传值)和按地址传递(ByRef,简称传址)。其中传址又称为引用,是默认方式。它们之间的区别如下: 在定义形式上前者在形参前加 ByVal 关键字。 在作用上值传递只能从外界向过程传入初值,但不能将结果传出;而地址传递既可传入又可传出。 如果实参是数组、自定义类型、对象变量等,形参只能是地址传递。 传址 按地址传递参数时,系统将实际参数(简单变量、数组或数组元素以及记录)的地址(即 变量在内存中的位置)作为形式参数的地址,以此访问实际参数的内容,也就是说,形式参数和实际参数占用相同的内存单元。这种方式下,当程序修改了形式参数的值时,实际上也 就修改了实际参数的值。在 VBA 中默认过程中的参数是按照地址传递参数的方式,如果要特别声明,可以在参数前加上 ByRef 关键字。 结果通过下面的例子,可以看出按地址传递参数如何永久改变所传递变量的内容。例如,定义一个有两个参数的过程,并调用这个过程,如图8-2 所示。 结果 Sub 调用传址()Dim a Sub 调用传址() Dim a As Integer, b As Integer a = 10: b = 20 Debug.Print 传址之前: Debug.Print a=; a, b=; b 传址 a, b Debug.Print 传址之后: Debug.Print a=; a, b=; b End Sub Sub 传址(x As Integer, y As Integer) x = x + 100 y = y * 6 End Sub 可以看出,在“传址”过程中对x,y 的改变,实际上是对参数变量a,b 的改变。也就是说,在调用过程时,系统将变量a 和 b 的地址分别传递给了x,y,这样在程序中x,y 实 际上在内存中就改变了变量a,b 的内容。 如果给按地址传递参数指定数据类型,就必须将这种类型的值传给参数。在使用参数时, 除了可以给参数传递某一数据类型的变量外,还可以给参数传递一个表达式或者一个具体的 数组、字符串等等。如果形参和实参的数据类型不相符,例如在上面程序代码中定义变量a 为单精度型。则系统会提示错误信息,提示参数类型不匹配,如图8-3 所示。 图 8-3 提示错误 对于形参和实参数据类型不匹配的情况,可以有两种解决方法。 利用类型转换函致 将实参强制转换为相应类型的数值,例如,如果变量 A 是一个单精度数, 如果所使用函数要求是整数,可以用转换函数将这个变量转换为整数,然后再传递到函数中。 使用自动类型转换 将需要转的变量用括号括起来即可。 一般来说,只有需要在过程中改变形参的内容时,才会使用按地址传递参数的方式。因为这种方式很可能在用户意想不到的地方改变形参的内容,造成程序的错误。用户可以选择使用按值传递参数的方式,来实现参数传递。 传值 按值传递参数就是通过值传送实际参数,传送的是实参的值而不是它的地址。在这种情况下,系统把需要传送的变量复制到一个临时单元中,然后把该临时单元的地址传送给被调用的通用过程。由于通用过程没有访问变量(实参)的原始地址,因而不会改变原来变量的值,所有的变化都是在变量的副本上进行的。 在 VBA 中,按值传递参数是通过关键字 ByVal 来实现的。也就是说,在定义通用过程时, 如果形参前面有关键字 ByVal,则按值传递该参数,否则按地址传递该参数。在传值方式下, VBA 为形参分配内存空间,并将相应的实参值赋值给各形参。 结果例如,将前面的例子改写为按传值方式传递参数,则运行结果是不一样的,如图8-4 所示。再次运行该程序,从【立即窗口】中出现的结果可以看出,利用按值传递参数的方式没有改变a 和b 的值。 结果 Sub 调用传值()Dim a Sub 调用传值() Dim a As Integer, b As Integer a = 10: b = 20 Debug.Print 传值之前: Debug.Print a=; a, b=; b 传值 a, b Debug.Print 传值之后: Debug.Print a=; a, b=; b End Sub End Sub Sub 传值(ByVal x As Integer, ByVal y As Integer) x = x + 100 y = y * 6 End Sub 传送方式 传址方式的效率比传值

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档