【发布时间】:2021-08-26 18:36:25
【问题描述】:
我有一段时间没有使用 VBA,所以我的技能有点生疏。我已经设法编写了一个小脚本,它将更新我在我的 excel 表中的 Date Contacted 和 Date Modified 列如果我要更改 A 列中的相应单元格。对于 A 列中的所有单元格,我设置a 使用数据验证工具列出。列表 = A, B, C, D。
脚本应在选中其中一个列表项时输入@ 987654326(列H)中的当前日期。如果单元格更改为新项目,则会出现一个消息框,询问用户是否要提交更改。如果是,Date Modified(第一列)将被更新。如果不是,A 列应该恢复到原来的状态,并且任何一个 Date 列都不应该被更新。
代码中没有错误,但是当提示回答是或否时,单击“否”会继续循环回到消息框。我陷入了困境,不知道如何逃脱。
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
【问题讨论】:
-
您需要关闭事件。您的
Application.Undo可能会重新触发导致无限循环的工作表更改事件 -
您的应用程序没有崩溃(与链接线程不同),但基本问题和解决方案是相同的。