本文作者:office教程网

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

office教程网 2024-10-31 23:44:11
后台-系统设置-扩展变量-手机广告位-内容正文顶部
摘要: 无意中发现一个Excel VBA对待参数的一个"不正常"现象。这种处理方式可能无意中导致程序结果错误,而且你很难发现你的错误所在:
Sub twotimes(t As Double) t = 2 * tEnd Sub...

无意中发现一个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)。它们是一样的吗?

Excel vba获(提)取工作表名称的两种方法

文章介绍excel提取工作表名称的三种方法,分别使用宏表函数、自定义函数,以及VBA获取工作表名称。 第一,excel提取工作表名称:宏表函数 excel提取工作表名称的方法,在以前的文章:Excel中工作表间的关联链接方法及实例曾经介绍过,使用宏表函数来提取工作表名称,并自动添加超链接。 第二,vba自定义函数获

运行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

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

Excel2007中用DIR函数批量获取指定目录下所有文件名

由于 Excel2007 及 Excel2010 版本都取消了对 Application 对象的 FileSearch 方法的支持,所以在 Excel2007 版本以后不能用 FileSearch 来批量获取指定目录下的所有文件名了,虽然少了 FileSearch 但还可以用内置的 Dir 函数。代码如下: Sub l

后台-系统设置-扩展变量-手机广告位-内容正文底部
未经允许不得转载:

作者:office教程网,原文地址:不正常的Excel VBA函数参数处理现象发布于2024-10-31 23:44:11
转载或复制请以超链接形式并注明出处 演示站

分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

留言与评论(共有 0 条评论)
   
验证码: