Я не могу найти правильный способ ссылки на "Родитель" - PullRequest
1 голос
/ 08 ноября 2019

В моей главной форме Access у меня есть элемент управления списком (названный "ActionsTaken"), который показывает список предпринятых действий, связанных с основной записью формы. Они хранятся в отдельной таблице, связанной с основной таблицей. С помощью кнопки я открываю подчиненную форму, чтобы добавить элементы в список. После ввода текста я нажимаю кнопку «Готово», которая закрывает подчиненную форму макросом. Когда подчиненная форма закрывается, событие деактивации запускает процедуру обработки события, которая проверяет данные, записывает их в таблицу действий и (надеюсь) запрашивает элемент управления списком в главной форме. Все работает, если я использую явную ссылку на элемент управления в главной форме для запроса, но эта подчиненная форма вызывается из нескольких основных форм, поэтому я хочу сослаться на элемент управления в главной форме, используя «Родитель». Синтаксис, который, я думаю, должен работать:

Me.Parent!ActionsTaken.Requery

Когда код выполняется, я получаю прерывание отладки в приведенной выше строке, и когда я сбрасываю выполнение кода, я получаю всплывающее окно с надписью «Нет поля»с именем 'Me.Parent! ActionsTaken' в текущей записи. "Элемент управления определенно присутствует (помните, что явная ссылка на него работает).

Я подозреваю, что не понимаю, как следует ссылаться на «Parent». Я нашел много других синтаксисов с различными комбинациями точки и взрыва и с выключенным «Я». Некоторые выдают мне разные сообщения об ошибках, но ни одно из них не работает.

Я нашел несколько неловких обходных путей, но мне действительно любопытно, что случилось.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

У меня это работает, благодаря июню и другим. Я связал «дочернюю» форму с таблицей, хотя это и не нужно, поскольку это позволяет мне косвенно передавать номер записи (ID) с помощью команды OpenForm. Я передаю имя «Родительской» формы «Дочернему» (подчиненная форма «Добавить новое действие») с аргументом OpenArgs команды OpenForm:

strFormName = Me.Name
DoCmd.OpenForm "Add New Action subform", , _
    "Comment Card ID Query", "[Comment Card].ID=[ID]" _
    , , , Me.Name

Когда я закончу с «Дочерним», я выполняю следующееcode:

Dim strParentName As String
strParentName = Me.OpenArgs

' Requery the Actions List Box on the Parent
[Forms](strParentName)!ActionsTaken.Requery

' Close the form
DoCmd.Close

Я попробовал предложенный в июне синтаксис: Forms (Me.OpenArgs ....), но получил ошибки из Access в Office 365. Использование строковой переменной сработало.

Спасибоза помощь!

0 голосов
/ 08 ноября 2019

Подформа - это форма, находящаяся в другой форме (это «родитель»), которая открывается, когда открывается другая форма («родитель») и, следовательно, не является подчиненной формой и не имеет родителя.

Передача имени формы во вторую открытую форму через OpenArgs:
DoCmd.OpenArgs "secondformname", , , , , , Me.Name

Тогда вторая форма может ссылаться на первую:
Forms(Me.OpenArgs).ActionsTaken.Requery

Другой подход заключается вОткройте вторую форму с помощью acDialog, который приостановит выполнение кода первой формы до закрытия второй формы.

DoCmd.OpenArgs "secondformname", , , , , acDialog
Me.ActionsTaken.Requery
...