由于编译错误,VBA Excel无法运行:类型不匹配

时间:2019-01-14 20:44:03

标签: excel vba

当我去运行VBA代码时,它给我一个错误“编译错误:类型不匹配”。它没有像以前一样提供错误代码。

它用于处理此数据。左侧的数据是我对照J行中的值并在M行中分配ID的表。

[Excel图片] [1]
Sub Cat()
    Dim i As String
    Dim x As String

    For i = 1 To 113
        For x = 1 To 13
            If Sheet1.Cells("B", i).Value = Sheet1.Cells("J", x) Then
                Sheet1.Cells("A", i).Value = Sheet1.Cells("M", x)
            End If
        Next
    Next
End Sub

我希望在for循环中插入行A的ID,其中B和M相等

2 个答案:

答案 0 :(得分:1)

多种类型不匹配

请记住:您可以使用例如Cells(i, "B")Range("B" & i)代表一个单元格范围。

代码

Option Explicit

Sub Cat()
    Dim i As Long
    Dim x As Long

    For i = 1 To 113
        For x = 1 To 13
            If Sheet1.Cells(i, "B").Value = Sheet1.Cells(x, "J") Then
                Sheet1.Cells(i, "A").Value = Sheet1.Cells(x, "M")
            End If
        Next
    Next
End Sub

答案 1 :(得分:0)

除了明显的i As String被非法用作循环计数的整数值(应声明为As Long)之外,您还颠倒了RowIndexColumnIndex参数Range.[_Default]成员隐式调用的结果:

enter image description here

Sheet1.Cells("B", i).Value

"B"不是有效的 RowIndex 值。

经验法则,如果您有用于列的字符串,请避免使用Range.Cells;当您有一行 index 和一列 index (即行和列的数值)时使用它。

当您拥有诸如"B"之类的列标题字符串时,请使用Range属性并连接单元格地址,例如Sheet1.Range("B" & i)