#ERROR:无法获得工作表类的匹配属性。 我已经尝试过在线提供的解决scheme

注意:我的问题还没有解决其他类似的问题,以及其他网站。 在对这个问题进行判断之前,请先对我的问题有个公正的看法

我正在尝试执行一个任务,首先我必须确定最小的第二个最小的数字,依此类推,我必须将数据从一列复制到另一列。 这将继续,直到复制值的总和变得大于或等于表格中的某个值( 这里比较的行号由variables“b”给出 )。 这将重复172个不同组,每43个细胞后重复。

我写了下面的代码:

Dim m As Range, k As Double, j As Double, b As Double, lIndex As Double, a As Double Set m = ActiveSheet.Range("E3:E40") For i = 1 To 172 j = 1 b = 45 + 43 * (i - 1) For k = 1 To 38 a = Application.Small(m, j) lIndex = Application.WorksheetFunction.Match(a, m, 0) If Cells(b, 7).Value < Cells(b, 1).Value Then Cells(lIndex, 7).Value = Cells(lIndex, 2).Value Else End If j = j + 1 Next k Set m = m.Offset(43) Next i 

现在有一个错误,popup说,无法获得工作表类的匹配属性。

注意:我尝试过在线解决scheme。

有没有其他办法可以做到这一点

要么

有没有错误,我在逻辑上或在语法上,因为我是新的VBA和编码本身。

a = Application.Small(m, j)肯定会返回一个Error Code当j实际上大于te范围m的大小。 在你的代码中,范围m = Range("E3:E40")有38个单元,但j可以高达38 * 172。

然后,您尝试使用错误代码作为第一个参数a来调用Match 。 这会导致运行时错误。 请注意Application.Match将导致错误代码而WorksheetFunction.Match引发运行时错误。

在所有情况下,如果您正确提取了“第k个最小”元素,则在Match不会发生错误。 没有能够检查你所有的代码,我猜你在这里想要的是

 a = Application.Small(m, k) ' <--- k, not j 

然后在*.Match(a, m, 0)不会出现错误。

在检查你的代码之后:

得到最小值后, j的下一个值应该是a + 1而不是j + 1
为什么? 因为如果你的最小值是4(4,6,10)
在第一个循环,j = 1,小将返回4。
在第二个循环中,j = 2,小的仍然会返回4,而不是6。