在VBA中使用嵌套的For循环运行时错误“9”
我试图循环两个列表,其中有一些行在第一列中有相同的数据(人的名字)。 对于匹配的名称,我想复制单元格(H,x)中的第二个数据集(x)到第一个数据集(y)单元格(H,y)的数据。 在我的尝试中,我使用了下面的代码。 为了简单起见,我只在第一个数据集(从第216行开始)处插入第二个数据集,尽pipe我认为把它放在不同的工作表中会更清晰。
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,因为我不知道什么时候我试图访问可用的数据之外的数据,这是我对错误的理解。
我注意到两件事情可能会导致你的错误。
首先,列索引应该在报价中。
所以.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
这在我的机器上运行正常,没有更多的运行时错误,但我不知道它是否产生你以后的结果。
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
这里的问题是,您可能会在电子表格中引用不存在的单元格,但这取决于您使用的是哪个版本的Excel。 2010版之前,所有Excel工作表中最多有256列。 无论如何,并且在上面给出您的评论之后,您会看到您的行和列参数是向后的。 它是单元格([行],[列])不是单元格([列],[行])。 你似乎已经指出,当你说“从第216行开始……”bigCounter迭代行而不是列。
- 确保工作表中有“Sheet1”
- 像约书亚说
Worksheets("Sheet1").Cells(A, counter)
是不正确的我认为它喊是Worksheets("Sheet1").Cells(counter, 1)
行Worksheets("Sheet1").Cells(counter, 1)
行“A”