Выгрузить / закрыть всплывающую форму после добавления одной строки

У меня есть всплывающая форма в Access frmAddComposerWork, которая открыта с вводом данных, установленным на да, где есть 2 текстовых поля: одно для имени композитора, а другое для названия работы.

После заполнения последнего текстового поля, когда я нажимаю ENTER (чтобы обновить таблицу с новой записью), я также хочу закрыть форму. Я пробовал несколько событий, для которых добавил следующую инструкцию VBA:

DoCmd.Close acForm, Me.frmAddComposerWork

Однако форма остается открытой и может получить новую запись (чего я совсем не хочу).

Как я могу закрыть форму после добавления одной строки?

Дважды щелкните последнее текстовое поле; VBE сгенерирует обработчик событий для события по умолчанию элемента управления TextBox (например, TextBox42_Change) - вы захотите использовать раскрывающийся список в правом верхнем углу панели кода VBE, чтобы выбрать другое событие, которое запускается при каждом нажатии клавиши (например, KeyDown ); проверьте параметр, чтобы убедиться, что клавиша была {ENTER}, и в этом случае вы можете перейти к закрытию формы; откажитесь от автоматически сгенерированного обработчика Change, если он вам не нужен.

Mathieu Guindon 10.08.2018 17:23
DoCmd.Close acForm, Me.Name или DoCmd.Close acForm, "frmAddComposerWork" Код должен вызывать ошибку, если в форме не указан элемент управления с именем frmAddComposerWork.
ComputerVersteher 12.08.2018 00:22
1
2
147
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Чтобы закрыть форму после нажатия Enter в последнем текстовом поле

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

Чтобы закрыть, когда вы нажмете Enter в любом месте формы

Свойство KeyPreview имеет значение True в процедуре события Load формы. Это приводит к тому, что форма получает события клавиатуры до того, как они будут получены каким-либо элементом управления.

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

При нажатии Enter в любом месте формы она закроется.

Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
       DoCmd.Close acForm, Me.Name
    End If
End Sub
Ответ принят как подходящий

Форма закрывается от события После вставки.

Option Compare Database
Option Explicit

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

Насколько я понимаю, этот простой подход позволяет достичь вашей цели:

  1. У вас есть форма, открытая в режиме Ввод данных - это означает, что она отображает только новую пустую запись.
  2. Пользователь может добавлять значения для новой строки, но не может переходить к существующим строкам.
  3. После того, как пользователь завершит добавление этой единственной новой строки, форма закрывается.

Другие вопросы по теме