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

标签 excel vba crash

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崩溃。

最佳答案

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

阅读代码的注释并进行调整以适合您的需求。

编辑:我假设您的代码放在工作表1中,否则您需要检查事件的目标范围是否与在此行中更改的范围不相交: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

让我知道是否有效

关于excel - 为什么Excel在更改工作表的Worksheet_Change事件上崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59796979/

相关文章:

c# - 我可以在没有 VS 的情况下创建自定义 Excel 文档级功能区吗

excel - 在 VBA Excel 中,当我将一个单元格复制到另一个单元格时,如果它是未复制的日期,我该怎么办?

ios - react native 应用程序在启动屏幕上崩溃

string - 为什么使用 const 字符串参数时程序会崩溃?

excel - 如何将输出、MsgBox 结果放在新列上

Excel PDF转换-超链接公式不可点击

excel - Access VBA 如何将新工作表添加到 Excel?

vba - 更改图像形状的图像

vba - excel不刷新所有数据透视表

c - C代码中的字母顺序错误