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)の範囲内のセルが空白の場合は常に、コードがクラッシュします。たとえば、cell(3,5)に番号または日付があり、cell(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 に答える