我遇到了运行时错误13
。类型不匹配。但我无法弄清楚为什么。有什么帮助吗?
Sub Separate_with_OR_without_comission()
Dim I As Integer
Dim WRng As Range
Dim NoRng As Range
Dim NameRgn As Range
Dim TotalCRng As Range
Set WRng = Range("with_comission")
Set NoRng = Range("without_comission")
Set NameRgn = Range("total_comission_name")
Set TotalCRng = Range("ttotal_comission")
For I = 1 To NameRgn.Rows.Count
If TotalCRng.Rows(I) > 0 Then // ERROR HERE
WRng.Rows(I) = NameRgn.Rows(I)
End If
If TotalCRng.Rows(I) < 1 Then // AND HERE
NoRng.Rows(I) = NameRgn.Rows(I)
End If
Next I
End Sub
当我尝试使用其他测试单元时很好,问题出在那些......但它们是“ttotal_comission”中的数字为什么VBA将其作为其他东西?
答案 0 :(得分:3)
问题是Rows(I)
返回范围对象,而不是整数值。您应完全符合以下声明:TotalCRng.Rows(I).Cells(1, 1).Value
或TotalCRng.Cells(1, 1).Value
。按原样写,如果它恰好是单个单元格,Excel将从Rows(I)返回值,在这种情况下调用范围的value属性,否则会引发您看到的类型不匹配错误,因为您是试图将范围与整数进行比较。
示例:
'no error
Debug.Print Sheet1.Range("B1")
'type mismatch error
Debug.Print Sheet1.Range("B1:B12")
另外,请记住,只有合并范围的左上角单元格才会实际返回值。
答案 1 :(得分:2)
你可以使用这样的结构:
for each c in range("rangeName1")
'if the source range is 3 columns to the right, same row'
c = c.offset(0,3).value
next c
答案 2 :(得分:0)
如果您要检查每行中单元格的值,则需要遍历单元格并单独比较这些值。
如果范围只是单列,而不是循环遍历每一行,您可以遍历每个单元格以获得相同的效果。
For I = 1 To NameRgn.Rows.Count
For j = 1 to NameRgn.rows(I).cells.count
If TotalCRng.Rows(I).cells(j).value > 0 Then // ERROR HERE
WRng.Rows(I).cells(j) = NameRgn.Rows(I).cells(j)
End If
If TotalCRng.Rows(I).cells(j).value < 1 Then // AND HERE
NoRng.Rows(I).cells(j) = NameRgn.Rows(I).cells(j)
End If
Next j
Next I