运行时错误' 9'在VBA中使用嵌套的For循环

时间:2015-07-09 16:06:33

标签: excel vba excel-vba

我试图遍历两个列表,其中有一些行在第一列中具有相同的数据(人名)。对于匹配的名称,我想将数据从单元格(H,x)中的第二数据集(x)复制到第一数据集的(y)单元格(H,y)。在我的尝试中,我使用了以下代码。为了简单起见,我只是将第二个数据集放在第一个数据集下(从第216行开始),尽管我认为将它放在不同的工作表中会更清晰。

Private Sub CommandButton1_Click()
Dim counter As Integer
Dim bigCounter As Integer


For counter = 2 To 214
    For bigCounter = 216 To 428
        If Worksheets("Sheet1").Cells(A, counter).Value = Worksheets("Sheet1").Cells(A, bigCounter) Then
            Worksheets("Sheet1").Cells(H, counter).Value = Worksheets("Sheet1").Cells(H, bigCounter)
            Exit For
        End If
    Next bigCounter
Next counter

End Sub

我不明白为什么我会收到运行时错误9,因为我无法判断我何时尝试访问可用的数据以外的数据,并且是我对错误的理解。

4 个答案:

答案 0 :(得分:1)

这里的问题是您可能在电子表格中引用不存在的单元格,但这取决于您使用的Excel版本。 2010版之前的所有Excel工作表中最多总共256列。无论如何,并且根据上面的评论,您可能会看到向后的行和列参数。它是Cells([row],[column])NOT Cells([column],[row])。当你说'#34;从第216行开始时,你好像已经说明了......" bigCounter遍历行而不是列。

答案 1 :(得分:1)

我注意到可能导致错误的两件事。

首先,列索引应该是引号。

因此.Cells(A, counter)应为.Cells("A", counter)

但即便如此,这也不是正确的,因为.Cells期望行索引首先跟着列索引,你在这里说的是去行A 而不是有意义(它期待一个数字,而不是一个字母)。

更改这两个问题会产生以下代码

Private Sub CommandButton1_Click()
Dim counter As Integer
Dim bigCounter As Integer


For counter = 2 To 214
    For bigCounter = 216 To 428
        If Worksheets("Sheet1").Cells(counter, "A").Value = Worksheets("Sheet1").Cells(bigCounter, "A").Value Then
            Worksheets("Sheet1").Cells(counter, "H").Value = Worksheets("Sheet1").Cells(bigCounter, "H")
            Exit For
        End If
    Next bigCounter
Next counter



End Sub

现在我的机器运行正常,没有运行时错误,但我不确定它是否会产生你想要的结果。

答案 2 :(得分:1)

Cells方法通常先取行,然后取列。专栏信也应该是语音标记。

在比较单元格中的值时,应明确使用.Value属性。

Public Sub CommandButton1_Click()
Dim counter As Integer
Dim bigCounter As Integer

For counter = 2 To 214
    For bigCounter = 216 To 428
        If Worksheets("Sheet1").Cells(counter, "A").Value = Worksheets("Sheet1").Cells(bigCounter, "A").Value Then
            Worksheets("Sheet1").Cells(counter, "H").Value = Worksheets("Sheet1").Cells(bigCounter, "H").Value
            Exit For
        End If
    Next bigCounter
Next counter

End Sub

答案 3 :(得分:0)

  1. 确保工作表中有“Sheet1”
  2. 就像Joshua说Worksheets("Sheet1").Cells(A, counter)是不正确的我认为对于行“A”来说是Worksheets("Sheet1").Cells(counter, 1)