作者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