Vba 错误:无法获取工作表类的匹配属性。我已经尝试过在线可用的解决方案

Vba 错误:无法获取工作表类的匹配属性。我已经尝试过在线可用的解决方案,vba,excel,excel-formula,excel-2016,Vba,Excel,Excel Formula,Excel 2016,注意:我的问题并没有被其他类似的问题解决。请公平地看待我的问题,然后再作出判断 我正在尝试执行一项任务,首先我必须识别最小的、第二小的数字,依此类推,根据这一点,我必须将数据从一列复制到另一列。这将一直持续,直到复制的值之和大于或等于表中的某个值。此处的行号由变量b给出,用于比较。每43个单元格重复172个不同的集合 我编写了以下代码: Dim m As Range, k As Double, j As Double, b As Double, lIndex As Double, a As D

注意:我的问题并没有被其他类似的问题解决。请公平地看待我的问题,然后再作出判断

我正在尝试执行一项任务,首先我必须识别最小的、第二小的数字,依此类推,根据这一点,我必须将数据从一列复制到另一列。这将一直持续,直到复制的值之和大于或等于表中的某个值。此处的行号由变量b给出,用于比较。每43个单元格重复172个不同的集合

我编写了以下代码:

 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
现在出现了一个错误,提示无法获取工作表类的match属性

注意:我在网上尝试过解决方案

还有别的办法吗

由于我不熟悉excel VBAs和自身编码,我在逻辑上或语法上是否有问题。

a=Application.Smallm,当j实际大于te range m的大小时,j肯定会返回错误代码。在您的代码中,范围m=range3:E40有38个单元格,但j可以高达38*172

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

在所有情况下,如果您正确获取了第k个最小元素,则匹配中不应出现错误。在无法检查所有代码的情况下,我猜您想要的是

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

检查代码后,*.Matcha,m,0中不应出现错误。

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

可能重复No,实际上我已经看过了。没有解决我的问题,而且我的问题有点不一样。对于这个问题,如果有人能提出建议的话,我也愿意接受其他方法。如果你能解释一下你在网上尝试/找到的其他解决方案有什么不起作用,那将非常有帮助。现在这是一个相当模糊的问题。我在网上尝试过解决方案。伟大的您尝试了哪些解决方案,哪些不起作用?请在做出判断之前进行公平的审查到目前为止,我们只知道您正在尝试使用Match并出现错误。同样的错误也出现在可能的重复中。请详细说明您尝试了什么,您的问题与其他在线问题有何不同,以及您的问题如何无法通过同一问题的前10个Google结果得到解决。@BruceWayne。。。您已经阅读了问题,我已经尝试用应用程序替换.Match函数。匹配,Application.WorksheetFunction.Match和WorksheetFunction.Match。。。请完整地阅读问题和我的代码,你会发现我已经将这些解决方案的要点合并在一起,对我的错误没有任何影响。|你在偷我的面包和黄油:我珍贵的匹配+1非常感谢@A.S.H。它就像一个符咒。还有一个问题我需要问你是否能帮我。。。我运行了代码,它给出了出乎意料的输出。它跳过了某些值并复制了某些不期望的值。我认为这可能是因为当我们使用小函数时,有多个值是相同的。你知道我有什么办法可以避免这样做,以便同样的值也能被处理吗?@AviGupta我不得不说,我希望你会遇到这个问题。不幸的是,Match将始终返回搜索项的第一个外观。这个问题更为复杂,而且本身就是一个问题。您可能可以尝试一些方法,在获取单元格后将其临时设置为空白。但是,这应该小心地做,始终是最小的,复制并设置为空白,循环…将这样做,谢谢。你是一个天使。。。我是新手,真的需要这样的答案。谢谢!!!在“总是希望”中,错误消息在抛出时更具描述性,因为编译器肯定知道函数的哪个部分导致了错误。很好的故障排除和修复!实际上我需要最小的,然后是第二小的值,然后是第三小的值,依此类推。所以它应该像j=1,2,3。。。等等至少是这样。但是在上面的解决方案中,使用k而不是j是一个更好的主意。正如我在回答中所说的,如果你有值4,6,20,10。当j/k仅增加1时,您将始终得到4。当j/k等于5时,你会得到6。