Excel 带有target.address的无限循环
我正在创建一个小程序,它将在“当前”页的第I列中查找更改。如果发现更改,它将剪切整个列,并将其粘贴到工作表“已完成”的最后一行。似乎当它进行剪切时,它陷入了一个无限循环,导致它永远不会击中“成功”的消息框。我怎样才能重新证明该地址的合理性,从而避免这个问题Excel 带有target.address的无限循环,excel,ms-access,vba,Excel,Ms Access,Vba,我正在创建一个小程序,它将在“当前”页的第I列中查找更改。如果发现更改,它将剪切整个列,并将其粘贴到工作表“已完成”的最后一行。似乎当它进行剪切时,它陷入了一个无限循环,导致它永远不会击中“成功”的消息框。我怎样才能重新证明该地址的合理性,从而避免这个问题 Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Dim LastRowCompleted As Long LastRo
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim LastRowCompleted As Long
LastRowCompleted = Sheets("completed").Cells(Sheets("completed").Rows.Count, "A").End(xlUp).Row
LastRowCompleted = LastRowCompleted + 1 'Next row after last row
Set KeyCells = Range("I:I")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
MsgBox "Cell " & Target.Address & " has changed."
MsgBox Range(Target.Address).Row
MsgBox Range(Target.Address).Column
'Cut and Paste Row
Range(Range(Target.Address).Row & ":" & Range(Target.Address).Row).Cut Sheets("completed").Range(LastRowCompleted & ":" & LastRowCompleted)
MsgBox "Made it."
End If
End Sub
如果要更改代码中的单元格内容,则使用“工作表更改事件”始终禁用事件,否则每次更改工作表时都会重复触发更改事件 要禁用事件,请使用代码开头的以下行
Application.EnableEvents = False
最后不要忘记启用事件,否则任何事件代码都不会自动触发
要启用事件,请在End Sub之前使用以下行
Application.EnableEvents = True
所以你的代码应该是这样的
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim LastRowCompleted As Long
LastRowCompleted = Sheets("completed").Cells(Sheets("completed").Rows.Count, "A").End(xlUp).Row
LastRowCompleted = LastRowCompleted + 1 'Next row after last row
Set KeyCells = Range("I:I")
Application.EnableEvents = False
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
MsgBox "Cell " & Target.Address & " has changed."
MsgBox Range(Target.Address).Row
MsgBox Range(Target.Address).Column
'Cut and Paste Row
Range(Range(Target.Address).Row & ":" & Range(Target.Address).Row).Cut Sheets("completed").Range(LastRowCompleted & ":" & LastRowCompleted)
MsgBox "Made it."
End If
Application.EnableEvents = True
End Sub
如果要更改代码中的单元格内容,则使用“工作表更改事件”始终禁用事件,否则每次更改工作表时都会重复触发更改事件 要禁用事件,请使用代码开头的以下行
Application.EnableEvents = False
最后不要忘记启用事件,否则任何事件代码都不会自动触发
要启用事件,请在End Sub之前使用以下行
Application.EnableEvents = True
所以你的代码应该是这样的
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim LastRowCompleted As Long
LastRowCompleted = Sheets("completed").Cells(Sheets("completed").Rows.Count, "A").End(xlUp).Row
LastRowCompleted = LastRowCompleted + 1 'Next row after last row
Set KeyCells = Range("I:I")
Application.EnableEvents = False
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
MsgBox "Cell " & Target.Address & " has changed."
MsgBox Range(Target.Address).Row
MsgBox Range(Target.Address).Column
'Cut and Paste Row
Range(Range(Target.Address).Row & ":" & Range(Target.Address).Row).Cut Sheets("completed").Range(LastRowCompleted & ":" & LastRowCompleted)
MsgBox "Made it."
End If
Application.EnableEvents = True
End Sub
旁注:Range(Range(Target.Address)。Row&“:”&Range(Target.Address)。Row)。Cut
可以简单地编写Target.EntireRow.Cut
旁注:Range(Range(Target.Address)。Row&“:”&Range(Target.Address)。Row)。Cut
可以简单地编写Target.EntireRow.Cut