2016-09-18 33 views
0

我試圖執行下一個代碼和得到的錯誤 -不能分配到陣列-vba

不能分配到陣列

哪裏錯誤?需要注意的是,如果我鍵入Dim arrf() As Variant代替Dim arrf(5) As Variant我得到的錯誤 -

類型不匹配

Public Function calc(ByVal value As Integer, ByVal num As Integer) As Variant() 

Dim arr(5) As Variant 
Dim x As Double 

If value >= num Then 
    x = value - Application.RoundDown(value/num, 0) * num 
    arr(0) = x 
    arr(1) = num - arr(0) 
    arr(2) = Application.RoundUp(value/num, 0) 
    arr(3) = 1 
    arr(4) = Application.RoundDown(value/num, 0) 
    arr(5) = 1 
Else 
    x = num - Application.RoundDown(num/value, 0) * value 
    arr(0) = x 
    arr(1) = value - arr(0) 
    arr(2) = Application.RoundUp(num/value, 0) 
    arr(3) = 1 
    arr(4) = Application.RoundDown(num/value, 0) 
    arr(5) = 1 
    calc = arr 
End If 

End Function 


Sub cellsfunc() 

With Application 
    .DisplayAlerts = False 
    .EnableEvents = False 
    .ScreenUpdating = False 
End With 

Dim lastrow As Integer 
Dim counter As Integer 

Dim arrf(5) As Variant 

lastrow = Cells(Rows.Count, 2).End(xlUp).Row 
For counter = 2 To lastrow Step 2 
    arrf = calc(Cells(4, counter), Cells(4, counter + 1)) 
Next counter 

With Application 
    .DisplayAlerts = True 
    .EnableEvents = True 
    .ScreenUpdating = True 
End With 

End Sub 
提前

感謝所有幫助者

+0

你需要添加其中'num'等於0的條件,否則就會在該行得到一個錯誤'X =值 - Application.RoundDown(價值/ NUM,0)* num'因爲你試圖devide爲零 –

+1

看到錯誤所在,選擇磨合類模塊的常規選項http://www.cpearson.com/excel/BreakInClassModule.aspx – Slai

回答

0

您需要聲明aarf作爲常規變種不是陣列。 VBA會爲你轉換它。

Dim arrf As Variant

0

有沒有在你的函數calc()一個問題:當它穿過else它只返回一個值,而不是if

這也許應該是這樣的:

Public Function calc(ByVal value As Integer, ByVal num As Integer) As Variant() 

    Dim arr(5) As Variant 
    Dim x As Double 
    If value >= num Then 
    x = value - Application.RoundDown(value/num, 0) * num 
    arr(0) = x 
    arr(1) = num - arr(0) 
    arr(2) = Application.RoundUp(value/num, 0) 
    arr(3) = 1 
    arr(4) = Application.RoundDown(value/num, 0) 
    arr(5) = 1 
    Else 
    x = num - Application.RoundDown(num/value, 0) * value 
    arr(0) = x 
    arr(1) = value - arr(0) 
    arr(2) = Application.RoundUp(num/value, 0) 
    arr(3) = 1 
    arr(4) = Application.RoundDown(num/value, 0) 
    arr(5) = 1 
    End If 
    calc = arr ' <------- THIS 
End Function 
0

你已經聲明爲固定大小陣列arrf

Dim arrf(5) As Variant 

數組返回函數不能返回一個固定大小的數組 - 只有一個動態數組。你只需要其聲明爲動態數組:

Dim arrf() As Variant