Потеря фокуса формы

Автор dalaty, 23 июня 2022, 22:19

0 Пользователи и 1 гость просматривают эту тему.

dalaty

Добрый вечер, уважаемые форумчане

Столкнулся с затруднением при написании макроса на форуме и у Питоньяка решения пока не нашел.
Собственно проблема заключается в следующем на листе есть кнопка вызова формы (Sub otchot), которая содержит поля дат и кнопки формирования отчетов.
Нажимая кнопку отчета в форме можем сформировать отчет определенного вида с выборкой данных из таблиц. В приведенном примере вызывем: Sub cr_otch_pustoe которая запускает crOtch () создающий новый лист для размещения отчета. В принципе уже на этом шаге возник затык при попытке обратится к элементам формы (Form) например к дате выдает сообщение "ошибка времени выполнения объектная переменная не установлена". Причем раньше такой проблемы небыло (немного переработал файл).
Собственно вопрос почему потерялась возможность обращения к форме?
Заранее благодарен за помощь.



Sub otchot () ' Загрузка формы отчетов
  Dim Form as Object
  DialogLibraries.LoadLibrary("Standard")
  form=CreateUnoDialog(DialogLibraries.Standard.Otchot)
  oBoxProd=Form.GetControl("OtchotFormi")
  Form.GetControl("DF1").text=Date
  Form.GetControl("DF2").text=Date
  form.Execute()
End Sub

Sub cr_otch_pustoe() ' Создание отчета
call crOtch ' создание листа для отчета
msgbox form.title '  просто обратился для примера
        End sub

sub crOtch () ' Лист для отчета
Dim oDoc as Object
Dim oSheet as Object
oDoc = ThisComponent
oSheet = oDoc.createInstance ("com.sun.star.sheet.Spreadsheet")
on error goto prod
If  ThisComponent.getSheets().getByName("Отчет") Is Nothing Then
prod:
oDoc.Sheets.insertByName ("Отчет", oSheet)
Else
oDoc.Sheets.removeByName("Отчет")
oDoc.Sheets.insertByName ("Отчет", oSheet)
End If
thiscomponent.currentController.activeSheet=thiscomponent.Sheets.getByName("Отчет")
end Sub


rami

Переменную Form вы определяете локально в Sub otchot() ' Загрузка формы отчетов, в других функциях или процедурах она не видна. Что-бы переменная была видна так же и в других функциях этого модуля, она должна быть определена вне функции.
Dim Form
Sub otchot() ' Загрузка формы отчетов
' ...
End Sub

dalaty

Добрый день, спасибо действительно упустил этот момент.