|
|
|
| Как из ВБА узнать открыта ли форма(ы) и закрыть их (всех ) | |
|
| |
|
|
|
| давно этим пользуюсь - вставляю имя формы и запрашиваю - True открыта
Function FormIsOpen_My(ParamArray Ar())
FormIsOpen_My = (SysCmd(acSysCmdGetObjectState, acForm, Ar(0)) And acObjStateOpen) <> False
End Function
|
есть еще коллекция форм и кажись открытых форм по ним мона пробежаться | |
|
| |
|
|
|
|
Public Function IsFormLoaded(frmname$) As Boolean
Dim c As Object
On Error GoTo errIsFormLoaded
'Для каждой из форм
For Each c In Forms
'Проверяем открыта ли форма
If c.Name Like frmname Then IsFormLoaded = True: Exit Function
Next
For Each c In Reports
'Проверяем для одноименного отчета
If c.Name Like frmname Then IsFormLoaded = True: Exit Function
Next
'Если что-то не срослось - всё нафих...
IsFormLoaded = False
Exit Function
errIsFormLoaded:
MsgBox Err.Description
IsFormLoaded = False
Exit Function
End Function
|
| |
|
| |
|
|
|
| эт понятно надо закрыть все открытые формы | |
|
| |
|
|
|
| Надо чтобы функция проверала есть ли открытые формы если есть закрить их всех на **** | |
|
| |
|
|
|
| все открытые формы попадают в коллекцию forms
dim i as integer
dim intCount as integer
intCount = forms.count
for i = intCount to 0 step -1
docmd.close acform, forms(i).name
next i
|
как-то так
(только возможно что не
for i = intCount to 0 ...
а
for i = intCount to 1 ...
)
не помню уже точно | |
|
| |
|
|
|
| а точнеее
Function CloseAllForms() As Boolean
On Error Goto AtEnd
Do While Forms.Count
DoCmd.Close acForm, Forms(0).Name
Loop
AtEnd:
CloseAllForms = (Forms.Count = 0)
End Function | |
|
| |