#ERROR: Unable to get match property of the worksheet class. I have already tried solutions available online

#ERROR: Unable to get match property of the worksheet class. I have already tried solutions available online

注意:我的问题没有被这个网站和其他网站上的其他类似问题解决。请对我的问题有一个公正的看法再判断

我正在尝试执行一项任务,其中首先我必须确定最小的数字、第二小的数字等等,根据这个我必须将数据从一列复制到另一列。这将一直持续到复制值的总和变得大于或等于 sheet 中的某个值(这里用于比较的行号由变量 "b"[=32 给出=]).这将重复 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

现在弹出一个错误提示,无法匹配 属性 作品sheet class.

注意:我已经尝试过在线解决方案。

有没有其他方法可以做到

因为我是 excel VBA 和编码本身的新手,所以我在逻辑上或语法上做错了什么。

当 j 实际上大于 te 范围 m 的大小时,

a = Application.Small(m, j) 肯定会 return 和 Error Code。在您的代码中,范围 m = Range("E3:E40") 有 38 个单元格,但 j 可以高达 38 * 172.

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

在所有情况下,如果您正确获取了 "kth smallest" 元素,您的 Match 中就不会出现错误。由于无法检查你们所有的代码,我猜你们想要的是

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

然后 *.Match(a, m, 0).

应该不会出现错误

检查您的代码后:

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