Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行时错误';9';在VBA中使用嵌套For循环_Vba_Excel - Fatal编程技术网

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

运行时错误';9';在VBA中使用嵌套For循环,vba,excel,Vba,Excel,我尝试循环浏览两个列表,其中第一列中的行具有相同的数据(人名)。为了匹配名称,我想将数据从单元格(H,x)中的第二个数据集(x)复制到第一个数据集的(y)单元格(H,y)。在我的尝试中,我使用了以下代码。为了简单起见,我只是将第二个数据集放在第一个数据集下(从第216行开始),尽管我认为将其放在不同的工作表中会更干净 Private Sub CommandButton1_Click() Dim counter As Integer Dim bigCounter As Integer For

我尝试循环浏览两个列表,其中第一列中的行具有相同的数据(人名)。为了匹配名称,我想将数据从单元格(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,因为我无法判断何时尝试访问可用数据之外的数据,这就是我对错误的理解

这里的问题是,您可能引用了电子表格中不存在的单元格,但这取决于您使用的Excel版本。2010版之前的所有Excel工作表中最多总共有256列。不管怎样,根据上面的注释,行参数和列参数似乎是反向的。它是单元格([行],[列])而不是单元格([列],[行])。当您说“从第216行开始…”时,您似乎已经指出bigCounter迭代行而不是列。

这里的问题是您可能引用了电子表格中不存在的单元格,但这取决于您使用的Excel版本。2010版之前的所有Excel工作表中最多总共有256列。不管怎样,根据上面的注释,行参数和列参数似乎是反向的。它是单元格([行],[列])而不是单元格([列],[行])。当您说“从第216行开始…”时,您似乎已经指出bigCounter迭代行而不是列。

这里的问题是您可能引用了电子表格中不存在的单元格,但这取决于您使用的Excel版本。2010版之前的所有Excel工作表中最多总共有256列。不管怎样,根据上面的注释,行参数和列参数似乎是反向的。它是单元格([行],[列])而不是单元格([列],[行])。当您说“从第216行开始…”时,您似乎已经指出bigCounter迭代行而不是列。

这里的问题是您可能引用了电子表格中不存在的单元格,但这取决于您使用的Excel版本。2010版之前的所有Excel工作表中最多总共有256列。不管怎样,根据上面的注释,行参数和列参数似乎是反向的。它是单元格([行],[列])而不是单元格([列],[行])。当您说“从第216行开始…”时,您似乎已经指出bigCounter迭代行而不是列。

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

首先,列索引应该在引号中

所以
。单元格(A,计数器)
应该是
。单元格(“A”,计数器)

但即便如此,这也不完全正确,因为
.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

现在,这在我的机器上运行良好,不再出现运行时错误,但我不确定它是否会产生您想要的结果。

我注意到两个可能导致您的错误的因素

首先,列索引应该在引号中

所以
。单元格(A,计数器)
应该是
。单元格(“A”,计数器)

但即便如此,这也不完全正确,因为
.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

现在,这在我的机器上运行良好,不再出现运行时错误,但我不确定它是否会产生您想要的结果。

我注意到两个可能导致您的错误的因素

首先,列索引应该在引号中

所以
。单元格(A,计数器)
应该是
。单元格(“A”,计数器)

但即便如此,这也不完全正确,因为
.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

现在,这在我的机器上运行良好,不再出现运行时错误,但我不确定它是否会产生您想要的结果。

我注意到两个可能导致您的错误的因素

首先,列索引应该在引号中

所以
。单元格(A,计数器)
应该是
。单元格(“A”,计数器)

但即便如此,这也不完全正确,因为
.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

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

Cells
方法通常先取行,然后取列。列字母也应为