VBA-错误2042

VBA-错误2042,vba,excel,Vba,Excel,我试图解决的问题是一个分区问题,我必须将n个权重分成k个组,每个组的权重尽可能均匀 我试图将某种形式的启发式应用到我的初始解决方案中,尝试在随机开始时进行改进,但不断遇到错误 我的初始解算法的基础是;选择下一个最大的未排序图元,并将其放入其中权重最小的组中。注意:我已经将元素按大小顺序进行了预分类 我从以下代码开始 Sub initialsolution(s() As Integer, n As Integer, k As Integer, w() As Long) Dim i As L

我试图解决的问题是一个分区问题,我必须将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()是权重的排序数组,在我的示例中,n=8,k=3,w=(5,4,3,3,2,2,1,1)

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


提前谢谢你

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

l = Application.Match(j, mass, 0)
而不是

l = Application.Match(j, mass)

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

您已经写了很多关于背景的内容,但似乎没有实际发布导致错误的代码行。。。VBA错误往往是相对通用的,因此有一个。尝试编辑您的问题,以便更容易回答特定错误。您如何传递参数?这是我的较大部分中的代码行,它运行子“initialsolutions,n,k,w”,其中所有参数都已预定义。mass为空,您尝试将j与之匹配。质量不是“空”的,默认值为0。当i=6时,算法只会在运行结束时中断。我找到了一个解决方案,见下文。非常感谢