|
|
|
| Есть файл .mde (типа закрытый от любопытных), в нем есть главная рабочая форма, при работе с которой требуется открывать дополнительные рабочие формы (находятся в других файлах mde или mdb), по закрытию дополнительной формы она должна передавать в главную форму строковую переменную. Дополнительные формы в процессе работы на основной форме могут вообще не потребоваться, а может их прийдеться открывать сотнями из сотни разных файлов.
Вначале писал mdb и просто копировал дополнительные формы в рабочий файл, обрабатывал их и удалял (вдальнейшем при закрытии пережимал базу), НО запамятовал, что формат mde не позволяет копировать формы :(
Нашел такое решение... но оно меня смущает, подскажите грамотно ли так работать с буфером и может есть что то более изящное :)
Пример:
В рабочей форме на событие, для примера взял ПолеДанных_Click(), пишу:
'Делаю невидимой область данных на рабочей форме
ОбластьДанных.Visible = False
'Запускаю функцию во внешнем файле, которая открывает дополнительную форму, из этого же файла
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "Дополнительная форма1.mdb", False, "Код"
appAccess.Run "Zapusk"
Set appAccess = Nothing
'Нахожу дополнительную форму и делаю её активной
hwnd = FindWindow(vbNullString, "Дополнительная форма1")
SetForegroundWindow (hwnd)
'Запускаю цикл работающий пока окно дополнительная форма присутствует
Do
hwnd = FindWindow(vbNullString, "Дополнительная форма1")
DoEvents
Loop Until hwnd = 0
'Восстанавливаю видимость рабочей формы, устанавливаю фокус на поле ввода данных и вывожу данные из буфера
ОбластьДанных.Visible = True
ПолеДанных.SetFocus
SendKeys "+{INS}", True
End Sub
В дополнительной форме на событие Form_Close() пишу:
ПолеРезультат.SetFocus
SendKeys "{F2}"
SendKeys "^{INS}", True
hwnd = FindWindow(vbNullString, "Форма1")
SetForegroundWindow (hwnd)
DoCmd.Quit
End Sub
Пишу в ACCESS2003 | |
|
|