为什么Excel会在更改工作表的Worksheet_Change事件上崩溃?

问题描述 投票:0回答:1
Private Sub Worksheet_Change(ByVal Target As Range)

Dim lrow1 As Long
Dim lrow2 As Long
Dim cell As Range
Dim sell As Range

lrow1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
lrow2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row

For Each cell In Sheets("Sheet2").Range("A1:A" & lrow2)
    For Each sell In Sheets("Sheet1").Range("A1:A" & lrow1)
        If cell.Value = sell.Value Then
            cell.Offset(0, 1).Value = sell.Offset(0, 1).Value
        End If
    Next sell
Next cell

End Sub

第一个条目有效,可以正确带来信息。在第二个条目中,Excel崩溃。

excel vba crash
1个回答
-1
投票

我试图重构您的代码并在某些部分进行清理。

阅读代码的注释,并根据需要进行调整。

编辑:我假设您的代码放置在sheet1中,否则您需要检查事件的目标范围是否与该行中更改的范围不相交:evalCellSheet2.Offset(0, 1).Value = evalCellSheet1.Offset(0, 1).Value

Private Sub Worksheet_Change(ByVal Target As Range)

    ' Give meaningful names to your variables
    Dim evalSheet1 As Worksheet
    Dim evalSheet2 As Worksheet

    ' Try not to use variable names that may conflict with Excel/VBA objects, properties, etc,
    Dim evalCellSheet1 As Range
    Dim evalCellSheet2 As Range

    Dim lastRowSheet1 As Long
    Dim lastRowSheet2 As Long

    ' Fully qualify objects
    Set evalSheet1 = ThisWorkbook.Sheets("Sheet1")
    Set evalSheet2 = ThisWorkbook.Sheets("Sheet2")

    ' Reuse objects you have already set
    lastRowSheet1 = evalSheet1.Cells(evalSheet1.Rows.Count, 1).End(xlUp).Row
    lastRowSheet2 = evalSheet2.Cells(evalSheet2.Rows.Count, 1).End(xlUp).Row

    For Each evalCellSheet2 In evalSheet2.Range("A1:A" & lastRowSheet2)
        For Each evalCellSheet1 In Sheets("Sheet1").Range("A1:A" & lastRowSheet1)
            If evalCellSheet2.Value = evalCellSheet1.Value Then
                ' As you're changing values, disable events and then reenable it
                Application.EnableEvents = False
                evalCellSheet2.Offset(0, 1).Value = evalCellSheet1.Offset(0, 1).Value
                Application.EnableEvents = True
            End If
        Next evalCellSheet1
    Next evalCellSheet2

End Sub

让我知道是否可行

© www.soinside.com 2019 - 2024. All rights reserved.