VBA - 退出 MsgBox()
VBA - Exiting out of MsgBox()
有一段时间没和VBA一起工作了,手艺有点生疏。我已经设法整理了一个小脚本,它将更新我在 excel sheet 中的 Date Contacted
和 Date Modified
列 如果我要更改列中的相应单元格A. 对于 A 列中的所有单元格,我使用数据验证工具设置了一个列表。列表 = A, B, C, D
.
选择列表项之一时,脚本应在 Date Contacted
(H 列)中输入当前日期。如果单元格更改为新项目,则会出现一个消息框,询问用户是否要提交更改。如果是,Date Modified
(第一列)将被更新。如果不是,A 列应该恢复到原来的状态,并且任何一个日期列都不应更新。
代码中没有错误,但是当提示回答是或否时,单击“否”继续循环回到消息框。我被困在循环中,不确定如何逃脱。
Private Sub Worksheet_Change(ByVal Target As Range)
' Auto Date
Dim Cell As Range
Dim Answer As Integer
For Each Cell In Target
If Cell.Column = Range("A:A").Column Then
If Cells(Cell.Row, "H").Value <> "" And Cell.Value <> "" Then
Answer = MsgBox("Are you sure you want to make these changes?", vbYesNo)
If Answer = vbYes Then
Cells(Cell.Row, "I").Value = Int(Now)
Else
Application.Undo
End If
Else
Cells(Cell.Row, "H").Value = Int(Now)
End If
End If
Next Cell
End Sub
在通过宏对工作表进行任何更改之前,您需要关闭事件。更改会触发事件,当您的事件发生更改时,它会重新触发事件,从而导致循环,或者在您的情况下,是条件循环。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'Any code that makes changes to worksheet nested inside
Application.EnableEvents = True
End Sub
有一段时间没和VBA一起工作了,手艺有点生疏。我已经设法整理了一个小脚本,它将更新我在 excel sheet 中的 Date Contacted
和 Date Modified
列 如果我要更改列中的相应单元格A. 对于 A 列中的所有单元格,我使用数据验证工具设置了一个列表。列表 = A, B, C, D
.
选择列表项之一时,脚本应在 Date Contacted
(H 列)中输入当前日期。如果单元格更改为新项目,则会出现一个消息框,询问用户是否要提交更改。如果是,Date Modified
(第一列)将被更新。如果不是,A 列应该恢复到原来的状态,并且任何一个日期列都不应更新。
代码中没有错误,但是当提示回答是或否时,单击“否”继续循环回到消息框。我被困在循环中,不确定如何逃脱。
Private Sub Worksheet_Change(ByVal Target As Range)
' Auto Date
Dim Cell As Range
Dim Answer As Integer
For Each Cell In Target
If Cell.Column = Range("A:A").Column Then
If Cells(Cell.Row, "H").Value <> "" And Cell.Value <> "" Then
Answer = MsgBox("Are you sure you want to make these changes?", vbYesNo)
If Answer = vbYes Then
Cells(Cell.Row, "I").Value = Int(Now)
Else
Application.Undo
End If
Else
Cells(Cell.Row, "H").Value = Int(Now)
End If
End If
Next Cell
End Sub
在通过宏对工作表进行任何更改之前,您需要关闭事件。更改会触发事件,当您的事件发生更改时,它会重新触发事件,从而导致循环,或者在您的情况下,是条件循环。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'Any code that makes changes to worksheet nested inside
Application.EnableEvents = True
End Sub