VBA - 错误2042

时间:2017-04-21 14:50:14

标签: vba excel-vba excel

我想解决的问题是分区问题,我必须将n个权重分成k组,每组的权重尽可能均匀。

我正在尝试将某种形式的启发式方法应用到我的初始解决方案中,尝试改进随机启动,但不断遇到错误。

我的初始求解算法的基础是;选择下一个最大的未排序元素并将其放入权重最小的组中。注意:我已将元素按大小顺序预分类。

我已经开始使用以下代码;

Sub initialsolution(s() As Integer, n As Integer, k As Integer, w() As Long)
    Dim i As Long, j As Long, l As long
    ReDim mass(1 To k) As Long

    For i = 1 To n
        j = WorksheetFunction.Min(mass)
        l = Application.Match(j, mass)
        mass(l) = mass(l) + w(i)
    Next i

End Sub

其中s()当前是从1到n的空数组,我将在后面填充,n是权重数,k是组数,w()是权重的排序数组,in我的审判案例,n = 8,k = 3,w =(5,4,3,3,2,2,1,1)。

我的问题出现在i = 6且我正在考虑权重2.质量的值为(6,6,5),因此质量的最小值j为5.但是在下一行中,设置a形成错误的值。当我将l更改为变量时,它将其值设置为Error 2042,当它应为3.这会导致错误代码“运行时错误'13':类型不匹配”由于错误2042无法用作索引。

提前谢谢

1 个答案:

答案 0 :(得分:0)

我找到了答案。如果我使用

l = Application.Match(j, mass, 0)

而不是

l = Application.Match(j, mass)

有效。我不确定之前的错误是什么,但是这个新方法只考虑第一次遇到匹配值并返回此索引。