#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。
注意:我的问题没有被这个网站和其他网站上的其他类似问题解决。请对我的问题有一个公正的看法再判断
我正在尝试执行一项任务,其中首先我必须确定最小的数字、第二小的数字等等,根据这个我必须将数据从一列复制到另一列。这将一直持续到复制值的总和变得大于或等于 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 和编码本身的新手,所以我在逻辑上或语法上做错了什么。
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。