If you need to check if MS Access form is loaded or not, you can easily check it using the folloing code
If CurrentProject.AllForms("FORMNAME").IsLoaded = True Then
' DO SOMETHING
End If
This code is good until you are using single form application. This code will fail if the form is used as subform. To search all the forms including subform, I have created a function calling which will search for all the loaded forms and gives the result as boolean value. Here is the example to check if the form is loaded or not
Dim IsLoaded as Boolean
IsLoaded = IsFormLoaded("FORMNAME")
The function IsFormLoaded will search each and every control within each form to find the form FORMNAME. Of course, this is a overhead to the application so to reduce the amount of search, two optional arguments can be provided which can be very helpful in searching subform. If you already know the parent form name of the subform and the controlname which holds subform within parent form, the time to search subform will be reduced. For example
Dim IsLoaded as Boolean
IsLoaded = IsFormLoaded("FORMNAME","PARENTFORMNAME")
will search all the controls withing PARENTFORMNAME form while
Dim IsLoaded as Boolean
IsLoaded = IsFormLoaded("FORMNAME","PARENTFORMNAME","CONTROLNAME")
will search for the CONTROLNAME control within PARENTFORMNAME form to check if the FORMNAME form is loaded.
The above mentioned functions are here.
Public Function IsFormLoaded(strFormName As String,
Optional LookupFormName As Form,
Optional LookupControl As Control) As Boolean
Dim frm As Form
Dim bFound As Boolean
If Not (IsMissing(LookupFormName) Or IsNull(LookupFormName)
Or LookupFormName Is Nothing) Then
If Not (IsMissing(LookupControl) Or IsNull(LookupControl)
Or LookupControl Is Nothing) Then
On Error GoTo ErrorHandler:
If LookupControl.ControlType = acSubform Then
If LookupControl.Form.Name = strFormName Then
bFound = True
End If
End If
Else
Call SearchInForm(LookupFormName, strFormName, bFound)
End If
Else
For Each frm In Forms
If frm.Name = strFormName Then
bFound = True
Exit For
Else
Call SearchInForm(frm, strFormName, bFound)
If bFound Then
Exit For
End If
End If
Next
End If
ErrorHandler:
IsFormLoaded = bFound
End Function
Public Function SearchInForm(frm As Form, strDoc As String,
bFound As Boolean)
On Error GoTo ErrorHandler
Dim ctl As Control
For Each ctl In frm.Controls
If ctl.ControlType = acSubform Then
If ctl.Form.Name = strDoc Then
'If ctl.SourceObject = strDoc Then
bFound = True
Else
Call SearchInForm(ctl.Form, strDoc, bFound)
End If
SkipElement:
If bFound Then
Exit For
End If
End If
Next
Exit FunctionErrorHandler:
Resume SkipElement
End Function
Leave a Reply