0

我正在编写代码,但出现 -2147417848 (80010108) 错误。我知道这是每次它“获得”一个空单元格时造成的,但我不知道如何解决它,有人可以帮我吗?这是代码

Dim i, g As Integer

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    g = 12

    For i = 3 To 5000

        If Worksheets("Registo_EPI´s").Cells(i, 1).Value = Cells(4, 20).Value Then
            Cells(g, 21).Value = Worksheets("Registo_EPI´s").Cells(i, 5).Value
            g = g + 1
        End If

    Next i

End Sub

每当 Cells(i,5) 范围内的单元格为空白时,代码就会崩溃。例如,如果在单元格(3,5)中我有一个数字或日期,如果在单元格(4,5)中我没有任何东西,它会崩溃。希望你们能帮助我。谢谢

4

1 回答 1

0

我认为您的Worksheet_Change事件处理程序很可能无意中调用了自己,这可能是您的问题的根源。

例如,如果显示的Worksheet_Change事件处理程序适用于Sheet1(因此不合格的引用,如Cells(4, 20).Value也引用Sheet1),那么当您更改事件处理程序的值时,Cells(g, 21)将再次调用,依此类推。Worksheet_ChangeSheet1

您应该使用Target事件处理程序的参数来防止这种情况。例如,如果您只对更改感兴趣,Cells(4, 20)那么您可以:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If (Target.Address(ReferenceStyle:=xlR1C1) = "R4C20") Then
        g = 12

        For i = 3 To 5000

            If Worksheets("Registo_EPI´s").Cells(i, 1).Value = Cells(4, 20).Value Then
                Cells(g, 21).Value = Worksheets("Registo_EPI´s").Cells(i, 5).Value
                g = g + 1
            End If

        Next i
    End If
End Sub
于 2011-03-30T05:51:18.190 回答