Alle Formulieren verbergen middels VBA in Access

Status
Niet open voor verdere reacties.

renew000

Gebruiker
Lid geworden
7 feb 2009
Berichten
151
Hallo experts,

Op dit moment ben ik bezig met een bestand waarin ik verschillende formulieren gebruik.
De formulieren kunnen worden opgeroepen met een "button"

Nu zou ik graag zien dat bij het een click-event alle formulieren worden gesloten (op het hoofdformulier na), maar het formulier dat gekoppeld is aan de "button" wordt geopend.

Nu ben ik ervan op de hoogte dat dit op verschillende manieren kan. Onder andere door de formulieren niet met naam te benoemen, maar met een nummer. Bijvoorbeeld frm_1 ipv frm_opboeken.

Dan kan ik gebruik maken van onderstaande code als ik bijvoorbeeld 5 formulieren heb:

Code:
Private Sub cmd_Opboeken_Click()

For i = 1 To 5
    Me("frm_" & i).Visible = False
Next
    Me.frm_1.Visible = True

End Sub

Nu ben ik van mening dat mijn formuliernamen onduidelijk zijn. Is er toch een soortgelijke manier waardoor ik wel gebruik kan maken van duidelijke formuliernamen? Daarnaast is er sowieso 1 formulier dat ALTIJD open dient te staan.

Alvast bedankt voor het meedenken
Greetz
 
Formuliernamen zijn ook maar namen. Een gebruiker hoeft ze niet te zien als je ze opent via knoppen. Dus zo'n ramp is het niet om de naam te standaardiseren. Maar je kunt simpel controleren op open formulieren met een paar functies.
Code:
Function fIsLoaded(ByVal strFormName As String) As Boolean
    'Functie om te checken of een formulier open is
    'If fIsLoaded("frm_inlogscherm") Then Forms!frm_inlogscherm.Form.Visible = True
    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0 Then
        If Forms(strFormName).CurrentView <> 0 Then
            fIsLoaded = True
        End If
    End If
End Function

Code:
Function OpenForms()
'Functie om door alle objecten te lopen
'If CurrentProject.AllForms("frmMyForm").IsLoaded Then
Dim obj As AccessObject
Dim dbs As Object
    
    Set dbs = Application.CurrentProject
    ' Search for open AccessObject objects in AllForms collection.
    For Each obj In dbs.AllForms
        If obj.IsLoaded = True Then
            MsgBox obj.Name
        End If
    Next obj
End Function
Deze functie controleert alle open formulieren. En laat je dan doen wat je op dat moment wilt doen. Kortom: met de AllForms collectie loop je dus door alle formulieren heen ongeacht de naam. Als je de functie OpenForms aanroept vanuit het formulier dat open moet blijven, kun je de naam ervan gebruiken om dat formulier open te laten + het hoofdformulier. De rest kun je dan sluiten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan