Allow Edits设为No时如何在datasheet form中粘贴数据?
解决方案
下面提供两种经过验证的可行实现方式:
方案1:一键切换编辑权限(匹配你最初的思路)
Datasheet窗体可以通过显示窗体页眉来放置按钮控件,操作步骤如下:
- 打开你的datasheet form,切换到「设计视图」
- 右键窗体空白区域,选择「窗体页眉/页脚」,调出页眉区域(该区域在datasheet视图下会固定显示在顶部)
- 在页眉区域插入按钮控件,命名为
btnToggleEdit,标题设置为「启用新记录粘贴」 - 为按钮添加点击事件的VBA代码:
Private Sub btnToggleEdit_Click() If Me.AllowEdits = False Then Me.AllowEdits = True Me.btnToggleEdit.Caption = "粘贴完成后点击锁定旧记录" ' 自动跳转到新记录行方便粘贴 DoCmd.GoToRecord , , acNewRec Else Me.AllowEdits = False Me.btnToggleEdit.Caption = "启用新记录粘贴" End If End Sub
- 保存窗体即可,日常使用时只需点击按钮解锁编辑,粘贴完新记录后再次点击按钮就能锁定所有已有记录,避免误改。
方案2:自动锁定旧记录(无需手动切换,更推荐)
不需要修改Allow Edits属性,通过事件控制旧记录不可编辑,新记录可正常粘贴:
- 将窗体的「Allow Edits」属性保持为「Yes」,同时设置「Allow Additions」为「Yes」,「Allow Deletions」按你的需求设置
- 为窗体添加
BeforeUpdate事件,VBA代码如下:
Private Sub Form_BeforeUpdate(Cancel As Integer) ' 判断当前操作的是不是已有旧记录 If Not Me.NewRecord Then ' 取消旧记录的修改操作 Cancel = True MsgBox "已有记录不允许修改", vbInformation End If End Sub
这个方案下你可以直接正常粘贴新记录,完全不需要手动切换权限,系统会自动拦截所有对已有记录的修改操作,符合使用需求。
内容的提问来源于stack exchange,提问作者ndemo
相关产品推荐
相关产品推荐

