2016-09-18 80 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