不正常的Excel VBA函数参数处理现象

时间:2022-03-07 08:34:56 

无意中发现一个Excel VBA对待参数的一个"不正常"现象。这种处理方式可能无意中导致程序结果错误,而且你很难发现你的错误所在:

Sub twotimes(t As Double)    t = 2 * tEnd Sub Sub test()    Dim t As Double    t = 123    twotimes t    MsgBox t            ' 输出 246    t = 123    twotimes (t)    MsgBox t            ' 输出 123     t = 123    Call twotimes(t)    MsgBox t            ' 输出 246End Sub

test函数对于twotimes有三种调用方法,分别为 twotimes t,twotimes (t)和call twotimes(t)。它们是一样的吗?

运行test之后,第一种方法和第三种方法都输出了246。这个没有问题,因为VBA的参数默认传引用,twotimes函数会修改t的值。但第二种方法输出了123。我猜测是因为实际调用了twotimes((t)),从而把(t)传引用进入了twotimes的函数体,这个括号在运行时并没有被编译器扔掉,(t)是一个临时变量,和t被当作不同的变量。

事实上,空格后面的括号里的变量会被执行,然后返回默认参数。下面是一个更精妙的例子,客官们可以猜测发生什么:

Sub test()    Dim myCollection As Collection    Dim myObject As Object        myCollection.Add (myObject)    myCollection.Add myObjectEnd Sub

在函数调用时应该尽量避免第二种写法。

标签:函数,是一个,种方法,输出,Excel函数
0
投稿

猜你喜欢

  • win10 20H1快速预览版18885更新内容与修复bug汇总

    2023-01-21 09:44:34
  • Wps如何打印表格 Wps打印表格的方法

    2022-07-03 14:38:43
  • word文档怎样设置域

    2022-10-04 05:48:25
  • WPS excel批量隔行添加空白单元格

    2022-01-31 06:23:41
  • itunesstore目前无法处理您的购买怎么解决_itunesstore无法处理您的购买解决方法

    2022-03-28 18:46:14
  • Win10 Mobile创意者更新支持的设备:不支持Lumia1520/830/930等旧设备

    2022-11-01 05:27:43
  • Win10如何自定义任务栏上的程序图标?

    2022-06-10 01:05:05
  • WPS word文档限制编辑设置 避免文件误修改

    2022-02-20 11:24:10
  • Win10 Mobile RS3快速预览版15208已知问题汇总

    2023-01-29 20:51:18
  • wps表格怎么添加编号

    2023-07-05 09:43:05
  • win10系统如何删除卸载软件之后残留的注册表信息?

    2023-01-29 23:08:38
  • Win10重置界面卡住了怎么办?重置界面无法载入解决方法

    2022-06-16 20:49:12
  • 如何查询苹果 Apple Store 零售店营业时间?

    2022-05-19 04:29:17
  • Win9技术预览版下载地址页面曝光:32位版本积将超过3GB

    2023-04-15 11:30:48
  • Win11怎么设置IE浏览器兼容性?IE浏览器兼容性设置教程

    2023-09-05 19:25:28
  • 快递批量查询高手怎么查快递单号?

    2022-10-04 11:50:19
  • PPT一次演讲vs无限使用实例教程

    2023-09-29 16:34:07
  • 影子系统怎么找回文件_影子系统删除文件恢复

    2022-12-23 17:37:16
  • 如何让实现 word 文档纸张方向的横竖设置 实例教程

    2023-04-10 00:12:31
  • 转转大师PDF编辑器在pdf文件上添加形状的方法

    2023-06-03 18:39:54
  • asp之家 电脑教程 m.aspxhome.com