看板 Visual_Basic 關於我們 聯絡資訊
看不下去了,問的人搞不清楚,回答的除版主外也是亂七八糟。 要在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
cf1064:疑,看成vb.net XDD 想說vb關鍵字後面a就省略 12/19 11:51
tsongs:看上一篇好心虛 一堆沒在VBA用過的功能 原來是別人套錯 12/19 23:04
Fmajor:Ok了,感謝m大的文章!! 12/21 13:04