使用 VBA 撤消对字段的更改

问题描述 投票:0回答:1

我有一个用于查找的数据库,只是偶尔进行编辑。为了避免意外的更改,我正在努力弹出确认编辑的提示。

数据库包含一个表,大约有 7k 条记录,没有表单。

我有什么:

  1. 表的 Before Change 事件采用 SetLocalVar 操作,表达式设置为:
    =ConfirmEdit()
  2. ConfirmEdit()
    非类模块中的 VBA 函数:
Option Compare Database

Public Function ConfirmEdit()

  If MsgBox("Are you sure you want to make this change?", vbQuestion + vbYesNo, "Confirm Edit") = vbNo Then
    DoCmd.RunCommand acCmdUndo
  End If

End Function

尽管实现了预期的行为,但当用户取消编辑时它会显示警告。

首先它显示了这个:
Prompt

单击“否”后,接着是:
Error

据我所知,我不能使用 Me 关键字,因为代码不在类模块内执行类似

Me.Undo
的操作。

有什么解决方案不引发该错误或隐藏它吗?

vba ms-access
1个回答
2
投票

据我所知,您只能通过在宏中使用 RaiseError 来取消编辑。首先创建以下

Before Change
事件宏:

enter image description here

然后你可以创建你的函数:

Public Function ConfirmEdit()

  ConfirmEdit = False
  If MsgBox("Are you sure you want to make this change?", vbQuestion + vbYesNo + vbDefaultButton2, "Confirm Edit") = vbYes Then
    ConfirmEdit = True
  End If

End Function

在此示例中,我将默认按钮设置为“否”,但您可以选择所需的按钮。现在当您去更改记录时会发生什么,您将按照原始示例收到以下提示:

enter image description here

当您单击“否”时,您会收到一条更友好的消息,如下所示:

enter image description here

请注意,您可以更改该消息中的文本。

我知道它不能解决您的第二条消息的问题,但这是取消编辑的更简洁的方法。不幸的是,您还需要按

Escape
键才能撤消更改。

最后一点,您还应该为

Before Delete
事件做类似的事情。

© www.soinside.com 2019 - 2024. All rights reserved.