Geopende formulieren

Status
Niet open voor verdere reacties.

linkav

Gebruiker
Lid geworden
13 jun 2007
Berichten
465
Beste,

Voor een bedrijf met meerdere afdelingen heb ik een access-applicatie met meerdere formulieren gemaakt. Ieder formulier bevat een label met de bedrijfsnaam.

Vanaf 01/01/15 worden 2 van de afdelingen separate bedrijven (dus nu 3 in totaal) die dezelfde applicatie blijven gebruiken. Wordt op de label met bedrijfsnaam gedubbelklikt, wordt een scherm geopend waarin de gebruiker kan kiezen uit een ander bedrijf. De naam van het gekozen bedrijf wordt weggeschreven in de label met de bedrijfsnaam. Omdat er meerdere formulieren kunnen geopend zijn zou de nieuwe bedrijfsnaam ook weggeschreven moeten worden op de geopende formulieren. Nu mijn vraag: kan ik in code te weten komen welke formulieren geopend zijn, zodat ik in een lus de formulieren kan doorlopen om het label aan te passen.

Bedankt voor jullie eventuele hulp.

Gr,
Ariane
 
Je mag het zo doen, maar het zou niet mijn oplossing zijn. Ik zou de gekozen naam opslaan in een tabel, en die naam bij het openen of activeren van het formulier (Form_Activate of Form_GotFocus event bijvoorbeeld) de naam uit de tabel halen en in het label zetten. Maar het kan ook met de AllForms collectie.
Code:
Function OpenForms()
Dim frm As AccessObject, dbs As CurrentProject
    Set dbs = Application.CurrentProject
    For Each frm In dbs.AllForms
        If frm.IsLoaded Then MsgBox frm.Name
    Next frm
End Function
 
Beste Octafish,

Bedankt voor je reactie/oplossing.

De naam van het bedrijf komt inderdaad uit een tabel. En bij iedere gebruiker heb ik het standaard bedrijfsnummer vastgelegd. Bij het opstarten van de applicatie wordt gekeken naar de gebruiker zijn standaard bedrijfsnummer en zo naar de naam van het bedrijf. Sommige gebruikers mogen in meerdere en kunnen dan ook wisselen tussen de verschillende bedrijven. Op het ogenblik dat ze wisselen van bedrijf kunnen meerdere formulieren openstaan (facturatie / offertes / bestellingen / ...) en moet op al deze formulieren ook de bedrijfsnaam veranderd worden....


Gr,
Ariane
 
Als je de geopende formulieren verder niet ziet, zou ik het logo alleen vervangen bij het actieve formulier dat dus de focus heeft. Activeer je dan een ander formulier, dan pas je dat aan. Dat is een stuk minder ingrijpend dan alle formulieren laten aanpassen die op dat moment geopend zijn. De snelheid van openen wordt er namelijk niet beter van. Bovendien: als je dan een formulier opent dat niet was aangepast, omdat op het moment van wisselen dat formulier niet geopend is, zit je alsnog met een oud logo.
Dus daarom zou ik de Form_Activate of Form_GotFocus, of desnoods Form_Load gebruiken.
 
Methode 1) Ik laat bij het opstartten van onze bewonersdossiers DB's na een loginprocedure voor de verschillende WZC's een Frm_instelling hidden opengaan; alle andere formulieren, rapporten, logo's, etc.... halen stuff uit dit formulier en een gebruiker die dus overschakelt in dit formulier naar een andere instelling van de groep ziet dus alles automatisch veranderen. Enige voorwaarde is dat dit formulier dus nooit gesloten wordt (uitgenomen bij het uitloggen). Maar dat kan je via verschillende functies wel forceren.

Methode 2) Bij mijn uitslagenprogramma maak ik gebruik van een knop met o.a. een QueryDef functie die in alle queries met in de benaming "_H" achteraan in één keer een oud wed_id verandert naar een nieuw wed_id. Zo is overschakelen ook in een wip gebeurd.
Code:
Sub Huidige_Wedstrijd_Queries(ByVal oldwedid As Integer, ByVal newwedid As Integer)

    Dim db As Database
    Dim qd As QueryDef
    Dim strq As String
    Dim pos, lenid, lenstr, teller As Integer
    
    Set db = CurrentDb
    
    teller = 0
    Do While (teller < db.QueryDefs.count)
        Set qd = db.QueryDefs(teller)
        If (Right(qd.Name, 2) <> "_H") Then
            GoTo next_query
        End If
        strq = qd.Sql
        'MsgBox strq
        pos = InStr(strq, CStr(oldwedid))
        If (IsNull(pos) = False And pos <> 0) Then
            lenid = Len(CStr(oldwedid))
            lenstr = Len(strq)
            strq = Left(strq, pos - 1) & CStr(newwedid) & Right(strq, (lenstr - pos - lenid + 1))
            'MsgBox strq
            qd.Sql = strq
        End If
next_query:
        teller = teller + 1
    Loop
    
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan