我對excel vba相當陌生,似乎無法用vbArrays解決這個問題。我創建了vba中的函數cumsum,只是爲了讓我的生活更輕鬆。不過,我想讓代碼更加靈活,以便我可以從函數和範圍中傳遞兩種變體。在我的代碼中,當我添加了vec = vec.value這一行時,如果我傳入了一個範圍,它可以很好地工作,但如果我希望它在我調用該函數並傳入非範圍類型。我注意到的是,如果我的代碼中沒有vec = vec.value行,並且我傳入一個範圍,它的維數爲0,我通過編寫自己的函數進行檢查。有人可以向我解釋我如何解決這個問題?謝謝。vba variant array bug
Public Function cumsum(vec As Variant) As Variant
Dim temp() As Variant
MsgBox (getDimension(vec))
'works if i use vec=vec.value if vec is a range but has 0 if i do not vec = vec.values
ReDim temp(LBound(vec, 1) To UBound(vec, 1), 1 To 1) As Variant
Dim intCounter As Integer
For intCounter = LBound(vec) To UBound(vec)
If intCounter = LBound(vec) Then
temp(intCounter, 1) = vec(intCounter, 1)
Else
temp(intCounter, 1) = temp(intCounter - 1, 1) + vec(intCounter, 1)
End If
Next
cumsum = temp()
End Function
Function getDimension(var As Variant) As Integer
On Error GoTo Err:
Dim i As Integer
Dim tmp As Integer
i = 0
Do While True:
i = i + 1
tmp = UBound(var, i)
Loop
Err:
getDimension = i - 1
End Function
我試過了。當你對範圍進行vartype時,它仍然認爲它是一個vbarray,對於變體也一樣 – Andrew 2012-07-20 16:35:22
當你使用TypeName時會發生什麼? – Jake 2012-07-20 16:38:36
兩者都是長類型 – Andrew 2012-07-20 16:57:18