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

网友投稿 360 2022-12-02

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

无意中发现一个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被当作不同的变量。

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

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么把excel缩放到一张纸打印
下一篇:Excel vba获(提)取工作表名称的两种方法
相关文章