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崩溃。
我试图重构您的代码并在某些部分进行清理。
阅读代码的注释,并根据需要进行调整。
编辑:我假设您的代码放置在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
让我知道是否可行