作者MOONRAKER (㊣秘密情报员)
看板Visual_Basic
标题Re: [VBA ] Function传回值的问题
时间Thu Dec 19 11:47:55 2013
看不下去了,问的人搞不清楚,回答的除版主外也是乱七八糟。
要在VBA的sub或function里面改变多个变数,只要把他传进去,在里面修改就可以了:
sub abc()
p = 10: q = 20
MsgBox "before: p, q = " & p & ", " & q
fun 3, p, q
MsgBox "after: p, q = " & p & ", " & q
end sub
Sub fun(i, j, k)
j = i * j
k = i * k
End Sub
这包在excel 2010测试过,一定成功,因为VBA的参数传递预设就是byref。
如果要加byref,那是加在引数前面,不是在函数里面。
Sub fun(i, ByRef j, ByRef k)
而事实上也不用加,原因如上,预设就是ByRef。
只有加上ByVal才会影响结果。
Sub fun(i, ByVal j, ByRef k)
你可以自己照上面修改看结果如何。
改成sub的原因是,既然function并不return值,那用sub也是一样。
然後是越看越火大的部份。
第一,VBA的function回传值跟fortran一样,写法是
function 函数名字(引数)
...
函数名字 = 传回值
...
end function
比如说,你函数名称是 fun ,那传回值就是 fun = ... 随便什麽东西
可以写在function内任意地方,不用在最後一列,也不会造成函数执行结束。
不需要,也不能使用return。
第二,
VBA的return没有任何回传值的功能。
VBA的return是跟gosub搭配使用的,意思是返回gosub呼叫的位置。
这组指令还要用到行号,
如今毫无意义,只是为了和老屁股BASICA相容才存在的。
这是VBA,不是VB.NET
到VB.NET才改用return传回值
即使在VB.NET,一次传回多个值也需要包成阵列,structure,或物件。
你j某c某是在哪里学的什麽新型VBA,
不但用return传回还可以一次回传多个值又不用转换成字串,简直宇宙最强。
但是我用得到的VBA就是上述那样。
如果你们可以,请在excel VBA editor内写出正确可以执行的程式供大家佐证。
--
从前有个马铃薯王国 有个高贵伟大的国王
有的人尊敬他 有的人畏惧他 但有个人敢看不起他不只是一条龙
嘿呵 快出动 去征服 去摆平 嘿呵 快出征 去征服那条龙
嘿呵 快出动
(宰了它!轰了它!)嘿呵 快出征 去征服那条龙
:■ Potatoes and Dragons (C)Alphanim France 2004-05 :.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.163.12.174
1F:→ cf1064:疑,看成vb.net XDD 想说vb关键字後面a就省略 12/19 11:51
2F:推 tsongs:看上一篇好心虚 一堆没在VBA用过的功能 原来是别人套错 12/19 23:04
3F:推 Fmajor:Ok了,感谢m大的文章!! 12/21 13:04