Следующий код получает только определение документа формы, а не открытую форму, как объяснено в https://ask.libreoffice.org/en/question/63260/how-to-access-to-the-controls-of-a-base-form-with-basic/?answer=63280#post-id-63280.
ThisDatabaseDocument.FormDocuments.getByName()
Правильное решение зависит от того, как вызывается макрос.Например, здесь приведен код, который можно вызвать с основного экрана Base перед открытием любой формы.Часть кода взята из https://ask.libreoffice.org/en/question/7555/open-form-via-macro-in-libreoffice-base/.
Sub getFormVal
form_container = ThisDatabaseDocument.FormDocuments.getByName("update_rform")
form_container.open()
Wait 500
oMainForm = form_container.Component.getDrawPage().getForms().getByIndex(0)
oControl = oMainForm.getByName("rid")
theValue = oControl.getCurrentValue()
MsgBox theValue
End Sub
Чтобы ThisDatabaseDocument
работал, код должен находиться в документе, а не в разделе Мои макросы, как описано в https://ask.libreoffice.org/en/question/94670/thisdatabasedocument-vs-thiscomponent/.
Более элегантный подход, чем получение значений из элементов управления, заключается в чтении столбцов из набора записей формы, как описано в https://stackoverflow.com/a/39770933/5100564
Но я не знаю, почему это такая трудная задача.
В любом случае с базами данных может быть сложно работать, а научиться писать макросы LibreOffice Base общеизвестно сложно.Однако, прилагая достаточные усилия, Base делает много вещей возможным.
Я натолкнулся на предложения, такие как подключение к инструменту xray.
Да, инструмент самоанализа, такой как XrayTool или MRI, необходимпри разработке макросов LibreOffice.