Vanuit een standaard module procedure oproepen voor tekstvak opmaak?

  • Onderwerp starter Onderwerp starter Zafar
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Zafar

Gebruiker
Lid geworden
2 jul 2008
Berichten
67
Beste Leden,

Ik ben momenteel bezig uit te zoeken of er een manier is waarop ik een procedure kan bouwen om bepaalde controls in mijn formulieren te kunnen bewerken onder bepaalde condities.

Ik heb gedacht om het als volgt aan te pakken:
Ik wil een aparte module aanmaken en daarin bepaalde procedures inbouwen. Vervolgens zou ik afhankelijk van de EVENTS van me formulier de procedures willen oproepen.

Een simpel voorbeeld van wat ik eigenlijk wil klaarspelen is dit

Als een gebruiker in mijn applicatie een nieuwe record wil toevoegen dan wil visueel graag klaarspelen dat alle textvakken een licht gele kleur krijgen.
En het lukt mij wel om dit klaar te spelen echter alleen maar als ik de code rechtstreeks zet achter de module van het formulier plaats bij een Event.

Ik snap nog niet zo goed hoe met argumenten te werken, maar ik had gehoopt dat ik dus middels een argument kon aangeven wat de naam van het formulier is zodat de procedure wordt uitgevoerd voor dat formulier. Maar het lukt me gewoon niet. Ik zet hieronder me code waarmee ik het wil klaar spelen.

Code:
        Dim i As Integer
        Dim x As Control
        
            For i = 0 To Me.Controls.Count - 1
                Set x = Me.Controls(i) 'grab a control
                If TypeOf x Is TextBox Then
                    With x
                        .BackColor = RGB(100, 200, 100) 'nog de juiste kleur aangeven
                    End With
                End If
            Next

Dit is de code meteen achter de module waarin hij het wel doet. Ik zoek nu een manier om vanuit een standaard module steeds zo een procedure op te kunnen roepen aangezien ik deze voor meerdere formulieren wil gebruiken. Ik heb zitten spelen met zaken als DIM FRM As USERFORM etc etc ..maar het lukt mij gewoon niet om vanuit een standaard module een procedure op te roepen waarbij ik even aangeef het gaat om dit formulier en voer je procedures uit voor het formulier.

Concreet:
1) Kun je via een sub procedure in een standaard module een variabele aanmaken die als argument wordt doorgeschoven naar de procedure zodat de code uitgevoerd kan worden voor dat formulier

AANPASSING: Ik werk in ACCESS 2010
 
Laatst bewerkt:
Geen idee in welk programma je dit wilt bereiken, maar het kan wel. In Access werkt het bijvoorbeeld op de volgende manier, met een functie die bijvoorbeeld TekstGeel heet.

Code:
Dim frm as Form
Tekstgeel(frm)
 
Geen idee in welk programma je dit wilt bereiken, maar het kan wel. In Access werkt het bijvoorbeeld op de volgende manier, met een functie die bijvoorbeeld TekstGeel heet.

Code:
Dim frm as Form
Tekstgeel(frm)

Excuses voor het niet vermelden daarvan:o
Ik werk namelijk in Access 2010. Ik zal dit meteen in mijn vraag ook aanpassen. Ik werk in een engelse versie van access, dus ik zal even dit uit gaan zoeken en opnieuw proberen. Alvast bedankt voor de reactie! Als altijd zeer gewaardeerd!!!
 
Maakt voor mijn opmerkingen niet zoveel uit:
Zet je code in een aparte module, en maak er een Public Function van. Voorbeeldje:
Code:
Public Function HuidigRecord(frm As Form) As Long
    HuidigRecord = frm.CurrentRecord
End Function
Deze functie geeft het huidige recordnummer terug. In een formulier roep je hem als volgt aan om het recordnummer in een tekstvak [txtRecord] te zetten:

Code:
Private Sub Form_Current()
    Me.txtRecord = HuidigRecord(Me)
End Sub
 
Maakt voor mijn opmerkingen niet zoveel uit:
Zet je code in een aparte module, en maak er een Public Function van. Voorbeeldje:
Code:
Public Function HuidigRecord(frm As Form) As Long
    HuidigRecord = frm.CurrentRecord
End Function
Deze functie geeft het huidige recordnummer terug. In een formulier roep je hem als volgt aan om het recordnummer in een tekstvak [txtRecord] te zetten:

Code:
Private Sub Form_Current()
    Me.txtRecord = HuidigRecord(Me)
End Sub

Ongelooflijk!! Hij werkt Prima bij mij,

Ik maakte echt een denk fout. Ik probeerde doormiddel van een procedure dit klaar te spelen en niet een Functie. Voor mijn eigen begrip is het dat ik dus een functie aangemaakt heb waarbij je input is het formulier, en vervolgens wordt het resultaat weergeven in tekstvakken van het formulier door te zeggen:"HuidigRecord = frm.CurrentRecord" .

Wat ik wel niet helemaal snap nog is waar is het resultaat van de functie als datatype LONG?
 
Het grote verschil tussen een Functie en een Procedure zit 'm hierin, dat een Procedure een verzameling Acties is, terwijl een Functie iets teruglevert. In dat laatste geval is de funtie (zeg maar) een variabele waar je wat in stopt. En variabelen hebben een gegevenstype nodig.
Om in het voorbeeld zo hoog mogelijk recordnummers te kunnen opslaan, heb ik het type Lng gebruikt. De functie werkt ook met Integer, en zelfs Byte, al kom je in het laatste geval niet verder dan 255 records. Dan zit je aan de max.
De rest heb je prima gesnopen!
 
Het grote verschil tussen een Functie en een Procedure zit 'm hierin, dat een Procedure een verzameling Acties is, terwijl een Functie iets teruglevert. In dat laatste geval is de funtie (zeg maar) een variabele waar je wat in stopt. En variabelen hebben een gegevenstype nodig.
Om in het voorbeeld zo hoog mogelijk recordnummers te kunnen opslaan, heb ik het type Lng gebruikt. De functie werkt ook met Integer, en zelfs Byte, al kom je in het laatste geval niet verder dan 255 records. Dan zit je aan de max.
De rest heb je prima gesnopen!

Echt super alweer bedankt voor de hulp en ik zal meer gaan spelen met functies!:)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan