[VBA ] EXCEL 2010 自定意函數的回傳值問題 (已解決)

看板Visual_Basic作者 (阿南)時間12年前 (2013/05/22 10:16), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串1/1
大家好,謝謝大家的建議,我已經發現問題在哪了。 這邊提出我的想法,順便提醒大家可能有的盲點。 1.VBA預設是從0開始,所以ReDim temp(1, n)實際上會是temp(0 To 1, 0 To n) 接著我排列時卻是指定從1開始,所以0那列沒有值所以會是0 當我在主程式沒有指定temp(1, i)時,理所當然會先回傳0那列的值 加上又限制只需要一列的情況,就會收到0的回傳值。 2.這點我比較不確定。以陣列當做輸入值時,儲存格的用法和vba的程式的用法有差異 若是想建立worksheet的Function時,建議還是把變數宣告成Range。 關於這點我還會在確認,我印象中Variant可以接受所有TYPE的資料才對。 這邊有錯的話,還請多多指教。謝謝 以下是我的FUNCTION Function rowcut(inputmatrix As Variant, m As Integer) As Variant Dim i, j As Integer Dim n As Integer Dim temp() As Double n = UBound(inputmatrix, 2) ReDim temp(1, n) As Double For i = 1 To n temp(1, i) = inputmatrix(m, i) Next rowcut = temp End Function 這個Function的目的是要擷取一個矩陣的某一列 但是在主程式使用這個function的回傳值會變成全部是0 例如, 1 2 3 4 5 6 7 8 9 如果我要擷取第二列,期望的結果應該是4 5 6。 但是在主程式得到的結果卻是0 0 0。 若是直接在worksheet使用的話,則會直接變成#VALUE!(我有考慮到ctrl+shift+enter) 因為完全沒有跑出任何error message,所以我完全不知道到底問題出在哪裡 此外,若是在function中加個,MsgBox temp(1,1)之類的來觀察結果的時候, 執行vba主程式會出現正確的結果,但是在worksheet則是完全沒有反應 直接出現#VALUE! 請有經驗的前輩,指點一下問題出在哪裡,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 133.11.172.30

05/22 10:34, , 1F
加breakpoint和watch看你inputmatrix收到什麼。
05/22 10:34, 1F

05/22 10:59, , 2F
inputmatrix是OK的,這個我確認過了(透過vba程式)
05/22 10:59, 2F

05/22 12:51, , 3F
m的值是0??
05/22 12:51, 3F

05/22 16:36, , 4F
m的值是指定第幾列,所以不會是0(已確認)
05/22 16:36, 4F
※ 編輯: s06yji3 來自: 133.11.172.30 (05/22 17:24)
文章代碼(AID): #1Hd2gEu7 (Visual_Basic)
文章代碼(AID): #1Hd2gEu7 (Visual_Basic)