出错时转到Line1无法在VBA

时间:2017-03-22 07:42:42

标签: vba excel-vba excel

我正在使用VBA代码来识别两个不同Excel工作表中的数据更改。代码匹配第一列中的数据(A2然后是A3然后是A4 ....)并检查行中的另一个表中的数据。但是,当代码在第一个工作表中找不到第二个工作表但不在第二个工作表中的数据时会被中断。 find函数不返回任何内容。

我需要你的帮助,因为我无法使On Error Goto Line1语句正常工作。

最佳, NISHANT

相同的VBA代码:

Sub Compare()
    Var = 2
    Sheets("Sheet1").Select
    Do Until Range("A" & Var).Value = ""
        Sheets("Sheet1").Select
        var1 = Range("A" & Var).Value
        Sheets("Sheet2").Select
        Range("A1").Select

        On Error GoTo Line1
        var2 = Range("A:A").Find(What:=var1).Row
        For i = 1 To 6
            If Worksheets("Sheet1").Cells(Var, i).Value <> _
               Worksheets("Sheet2").Cells(var2, i) Then
                Worksheets("Sheet2").Cells(var2, i).Interior.ColorIndex = 3
            End If
        Next

Line1:
        Var = Var + 1
    Loop
End Sub

1 个答案:

答案 0 :(得分:1)

您没有正确使用错误处理。例如,在遇到错误后,您尝试继续处理,就像没有发生任何事情一样。当下一个错误发生时,这将导致无法解决的错误。

除非绝对必要,否则最好避免错误处理,在这种情况下,这是不必要的。

Sub Compare()
    Dim FindRange As Range
    Dim Var As Long
    Dim Var2 As Long
    Var = 2
    Do Until Worksheets("Sheet1").Range("A" & Var).Value = ""
        var1 = Worksheets("Sheet1").Range("A" & Var).Value

        Set FindRange = Worksheets("Sheet2").Range("A:A").Find(What:=var1)
        If Not FindRange Is Nothing Then
            var2 = FindRange.Row
            For i = 1 To 6
                If Worksheets("Sheet1").Cells(Var, i).Value <> _
                   Worksheets("Sheet2").Cells(var2, i) Then
                    Worksheets("Sheet2").Cells(var2, i).Interior.ColorIndex = 3
                End If
            Next
        End If
        Var = Var + 1
    Loop
End Sub