Re: [VBA ] Function传回值的问题

楼主: MOONRAKER (㊣牛鹤鳗毛人)   2013-12-19 11:47:55
看不下去了,问的人搞不清楚,回答的除版主外也是乱七八糟。
要在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内写出正确可以执行的程式供大家佐证。
 
作者: cf1064 (蚵仔)   2013-02-19 11:51:00
疑,看成vb.net XDD 想说vb关键字后面a就省略
作者: tsongs (......)   2013-02-19 23:04:00
看上一篇好心虚 一堆没在VBA用过的功能 原来是别人套错
作者: Fmajor (萬物靜觀皆自得)   2013-02-21 13:04:00
Ok了,感谢m大的文章!!

Links booklink

Contact Us: admin [ a t ] ucptt.com