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