【问题标题】:Unload/close a popup form after adding one row添加一行后卸载/关闭弹出表单
【发布时间】:2018-08-13 00:36:09
【问题描述】:

我在 Access frmAddComposerWork 中有一个弹出表单,该表单打开时数据输入设置为 Yes,其中有 2 个文本框:一个用于作曲家姓名,另一个用于工作标题。

填写最后一个文本框后,当我点击 ENTER (用新记录更新后面的表格)时,我也想关闭表单。我尝试了几个事件,在这些事件上添加了以下 VBA 指令:

DoCmd.Close acForm, Me.frmAddComposerWork

但是,表单保持打开状态并且容易收到新记录(我根本不想要)。

添加一行后如何让表单自行关闭?

【问题讨论】:

  • 双击最后一个文本框; VBE 将为TextBox 控件的默认事件(例如TextBox42_Change)生成一个事件处理程序 - 您需要使用 VBE 代码窗格中右上角的下拉菜单来选择另一个事件,该事件在每次触发时触发按键(例如KeyDown);测试参数以验证键是否为 {ENTER},在这种情况下,您可以继续关闭表单;如果您不需要自动生成的 Change 处理程序,请丢弃它。
  • DoCmd.Close acForm, Me.NameDoCmd.Close acForm, "frmAddComposerWork" 除非表单上有名为 frmAddComposerWork 的控件,否则您的代码应引发错误。

标签: vba ms-access


【解决方案1】:

让表单在其插入后事件后自行关闭。

Option Compare Database
Option Explicit

Private Sub Form_AfterInsert()
    DoCmd.Close ObjectType:=acForm, ObjectName:=Me.Name, Save:=acSaveNo
End Sub

按照我的理解,这种简单的方法可以实现您的目标:

  1. 您在 数据输入 模式下打开了表单 --- 这意味着它只显示一个新的空白记录。
  2. 用户可以为新行添加值,但不能导航到任何现有行。
  3. 在用户完成添加单个新行后,表单将关闭。

【讨论】:

    【解决方案2】:

    在最后一个文本框上按 Enter 后关闭表单

    Private Sub Text2_KeyPress(KeyAscii As Integer)
         If KeyAscii = vbKeyReturn Then
            DoCmd.Close acForm, Me.Name
         End If
    End Sub
    

    在表单的任意位置按 Enter 键时关闭

    KeyPreview 属性在表单的 Load 事件过程中设置为 True。这会导致表单在被任何控件接收之前接收键盘事件

    Private Sub Form_Load()
        Me.KeyPreview = True
    End Sub
    

    在表单的任意位置按回车键会关闭

    Private Sub Form_KeyPress(KeyAscii As Integer)
        If KeyAscii = vbKeyReturn Then
           DoCmd.Close acForm, Me.Name
        End If
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 2015-10-06
      • 2013-11-23
      • 2012-07-09
      • 2015-08-17
      相关资源
      最近更新 更多