正在收到运行时错误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将其作为其他内容?

最佳答案

问题在于Rows(I)返回的是范围对象,而不是整数值。您应该完全像这样对语句进行限定:TotalCRng.Rows(I).Cells(1, 1).Value或可能的TotalCRng.Cells(1, 1).Value。照原样编写,如果恰好是单个单元格,Excel将从Ro​​ws(I)返回值,在这种情况下,将调用范围的value属性,但否则会引起您看到的Type Mismatch错误,因为尝试将范围与整数进行比较。

例:

'no error
Debug.Print Sheet1.Range("B1")

'type mismatch error
Debug.Print Sheet1.Range("B1:B12")

另外,请记住,只有合并范围的左上角单元格实际上会返回一个值。

关于vba - 在VBA中获取 “error: type mismatch”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4222823/

10-13 05:18