工作表更改事件VBA代码,导致excel 2013崩溃



在人们帮助我解决了第一个问题后,我打开了一个新问题,现在我有了一个问题。您可以在下面的"初始化设备"页面上找到编码。代码倒数第二部分的想法是添加B7:b和E7:E中的列(文本值),并将其显示在J7:J列上。因此,如果Photo被输入B,Pass被输入E列,那么结果将是Photopass在J列。如果通过宏命令运行,原始代码可以正常工作。问题是,我试图将它添加到我现有的一些代码中,现在当信息输入到ANY单元格时,整个程序将崩溃。程序变得没有响应,然后关闭并重新启动。我没有收到代码或调试消息。这是页面上的全部代码。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 7 And UCase(Target.Value) = "YES" Then
    Sheets("MESSAGE CHANGES").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 3) = Sheets("INITIATING DEVICES").Cells(Target.Row, 1).Resize(, 3).Value
    Application.Goto Sheets("MESSAGE CHANGES").Cells(Rows.Count, 1).End(xlUp).Offset(, 3)
End If

 If Target.Column = 6 And UCase(Target.Value) = "YES" Then
    Sheets("DEVICE NOTES").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 3) = Sheets("INITIATING DEVICES").Cells(Target.Row, 1).Resize(, 3).Value
    Application.Goto Sheets("DEVICE NOTES").Cells(Rows.Count, 1).End(xlUp).Offset(, 3)
End If

 '(replace if new code fails)If Target.Column = 5 And UCase(Target.Value) = "FAIL" Or Target.Column = 5 And UCase(Target.Value) = "DAMAGED" Then
    '(replace if new codes fails)Sheets("FAILED DEVICES").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 3) = Sheets("INITIATING DEVICES").Cells(Target.Row, 1).Resize(, 3).Value
 If Target.Column = 5 And UCase(Target.Value) = "FAIL" Or UCase(Target.Value) = "DAMAGED" Then
    Application.EnableEvents = False
    Sheets("FAILED DEVICES").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 5) = Sheets("INITIATING DEVICES").Cells(Target.Row, 1).Resize(, 5).Value
    Sheets("FAILED DEVICES").Cells(Rows.Count, 1).End(xlUp).Offset(, 5) = Sheets("INITIATING DEVICES").Cells(Target.Row, 11).Value
    Application.EnableEvents = True

End If
'code that will place date/time when value is selcted in E
If Not Intersect(Target, Range("E:E")) Is Nothing Then
   Range("I" & Target.Row).Value = Now
End If
Dim wb As Workbook
Dim ws As Worksheet
Dim lastRow As Long
Set wb = ThisWorkbook
Set ws = wb.Sheets("INITIATING DEVICES")
lastRow = ws.Range("B" & ws.Rows.Count).End(xlUp).Row
ws.Range("J7:J" & lastRow).Value = Evaluate("=B7:B" & lastRow & "&E7:E" & lastRow)

End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
With Sheets("INITIATING DEVICES")
    .PageSetup.PrintArea = .Range("A1:H" & .Cells(Rows.Count, 1).End(xlUp).Row).Address
End With
End Sub

谢谢你能给我的任何帮助,如果你需要更多信息,我可以发送检查文件,如果需要,还可以提供更多信息。我确信我把事情搞砸了,这就是它不断崩溃的原因。还在这里学习。

如果它正在崩溃,则会重复调用Change事件。你需要使用

Application.EnableEvents = False

以防止在对工作表进行更改(使用代码)时再次触发"更改"事件。

最新更新