作者s06yji3 (阿南)
看板Visual_Basic
标题[VBA ] EXCEL 2010 自定意函数的回传值问题
时间Wed May 22 10:16:44 2013
大家好,谢谢大家的建议,我已经发现问题在哪了。
这边提出我的想法,顺便提醒大家可能有的盲点。
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
1F:→ MOONRAKER:加breakpoint和watch看你inputmatrix收到什麽。 05/22 10:34
2F:→ s06yji3:inputmatrix是OK的,这个我确认过了(透过vba程式) 05/22 10:59
3F:推 knstt:m的值是0?? 05/22 12:51
4F:→ s06yji3:m的值是指定第几列,所以不会是0(已确认) 05/22 16:36
※ 编辑: s06yji3 来自: 133.11.172.30 (05/22 17:24)