微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA - 退出 MsgBox()

如何解决VBA - 退出 MsgBox()

我有一段时间没有使用 VBA,所以我的技能有点生疏。如果我要更改 A 列中的相应单元格,我设法将一个小脚本放在一起,该脚本将更新我在 Excel 表中的 Date ContactedDate Modified 列。对于 A 列中的所有单元格,我使用数据验证工具设置了一个列表。列表 = A,B,C,D

脚本应在选择其中一个列表项时输入Date Contacted(列H)中的当前日期。如果单元格更改为新项目,消息框将询问用户是否要提交更改。如果是,Date Modified(第一列)将被更新。如果不是,则 A 列应恢复到原来的状态,并且不应更新任何一个日期列。

代码中没有错误,但是当提示回答是或否时,单击“否”继续循环回到消息框。我被困在循环中,不知道如何逃脱。

enter image description here

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。