【问题标题】:How do you prevent repeated MsgBox firing in the Form_Delete event?如何防止在 Form_Delete 事件中重复触发 MsgBox?
【发布时间】:2020-07-13 18:14:45
【问题描述】:

我有一个数据表表单,它使用户可以轻松选择所有记录并删除。我想写一个 VBA 代码来防止用户在选择超过 20 条记录时删除记录。然后我写了这段代码,但问题是每条记录都会触发消息。有人遇到过这个吗?请看下文。

  Private Sub Form_Delete(Cancel As Integer)
  If Me.SelHeight > 20 Then
      Cancel = True
      MsgBox ("Bulk deletion is not allowed!")
 End If
 End Sub

【问题讨论】:

  • 从未见过此要求。可能必须通过将表单 AllowDeletions 设置为 no 来防止任何记录删除,然后使用后面的代码可能是表单 DoubleClick 事件以使用 DELETE sql 操作删除记录。删除记录应该很少发生。为什么允许用户删除?
  • 作为我的解决方案的替代方案,您可以将记录标记为已删除(附加字段IsDeleted)并在删除时更新该标志。如果您删除记录,您应该压缩数据库以缩小它。
  • @ComputerVersteher 感谢您的帮助,但您的代码无法启动按摩。
  • @June7 一位用户提到他们已经从数据表中选择了整个数据并打算复制但最终删除了所有内容。
  • 这里的防止删除已经不是问题了。重复的按摩射击是针对每条记录的。也许我应该将帖子的标题更改为“如何防止在 Form_Delete 事件中重复触发 MsgBox?”

标签: vba ms-access


【解决方案1】:

如果您对BeforeDelConfirm event 没有被解雇感到困惑,就像我得到的那样,请检查Confirm Record ChangesOption 是否已设置。如果不是,则不会引发事件。

使用BeforeDelConfirmandAfterDelConfirm,这个任务就简单多了。

在表单模块之上

Option Explicit

Dim deleteCount As Long
Private Const MaxDeleteRows As Long = 20 ' set this constant to the number of rows that can be deleted at once

事件代码:

Private Sub Form_AfterDelConfirm(Status As Integer)
  If deleteCount > MaxDeleteRows Then
    MsgBox ("Bulk deletion is not allowed!")
  End If
  deleteCount = 0
End Sub

Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
  If deleteCount > MaxDeleteRows Then
    Cancel = True
  End If
  Response = acDataErrContinue
End Sub

Private Sub Form_Delete(Cancel As Integer)
  If deleteCount = 0 Then
    deleteCount = Me.SelHeight
  End If
End Sub

Private Sub Form_Deactivate()
 ' Application.SetOption "Confirm Record Changes", False ' needed if you want to have Confirm Record Changes off elsewhere
End Sub

Private Sub Form_Activate()
 ' Application.SetOption "Confirm Record Changes", True ' needed if you want to have Confirm Record Changes off elsewhere (turns it on here)
End Sub

【讨论】:

  • 来自您的代码:如果选择的记录少于 20 条,则 Response = acDataErrContinue 会删除访问确认消息。如果我删除它触发的行,但如果用户选择超过 20 条记录,则删除后确认失败。有没有办法同时使用它们或类似的东西?
  • 什么Office版本?如果在触发删除后在 Access 2007 上删除。你检查了没有用断点触发?Confirm Record Changesis on?
  • 我们根据用户所在的站点使用 2007、2013 和 2016。这个想法是,如果通过数据表视图选择了多条记录并取消删除,则用户只收到一条消息,但如果选择的记录少于 20 条,则允许删除。我知道这在 vba 中可能很难完成。
猜你喜欢
  • 2016-02-03
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
相关资源
最近更新 更多