String opmaken en gebruiken in andere sub's.

Status
Niet open voor verdere reacties.

jempi10

Gebruiker
Lid geworden
24 okt 2012
Berichten
230
Om in een rapport bepaalde lijnen te kleuren, moet een besturingselement voldoen aan een voorwaarde.

Ik heb dit voor mekaar gekregen, maar graag had ik die voorwaarde bepaalt via een inputbox.
Alleen, de inputbox moet voor iedere lijn die op het rapport komt worden ingevuld.

Mijn vraag: kan het dat ik de inputbox maar een keer moet invullen, en dat het gegeven dan gebruikt wordt voor iedere lijn.
In mijn voorbeeld: "Familienaam" vooraf bepalen bepalen als A$.

Code:
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)

     If [Familienaam] = "Kernlid" Then
            [Familienaam].ForeColor = 255
            [Geb_dat].ForeColor = 255
            [Tekst14].ForeColor = 255
        Else
            [Familienaam].ForeColor = 0
            [Geb_dat].ForeColor = 0
            [Tekst14].ForeColor = 0
    End If

End Sub

Dan wordt het : If [Familienaam] = A$

Alvast bedankt voor de hulp.
 
Waarom gebruik je geen Voorwaardelijke opmaak? En wat is 'A$'? Riekt als een kolom in Excel... Voorwaardelijke opmaak is overigens wat lastiger te doen met variabelen, dus wellicht is een tekstvak op een formulier toch wat makkelijker. Een Inputbox is wel heel rudimentair trouwens, ik neem aan dat je het rapport opent vanaf een formulier, en dan kun je het 'voorwaardeveld' net zo goed op dat formulier zetten. En dan neem je de waarde eruit mee in de OpenArgs variabele en die gebruik je dan weer in je code.
Code:
     If [Familienaam] = Me.OpenArgs Then
            [Familienaam].ForeColor = 255
            [Geb_dat].ForeColor = 255
            [Tekst14].ForeColor = 255
        Else
            [Familienaam].ForeColor = 0
            [Geb_dat].ForeColor = 0
            [Tekst14].ForeColor = 0
    End If
 
Beste Octafish

Alvast bedankt om mijn vraag te bestuderen.
Jaren geleden heb ik avondlessen Acces gevolgd. Ik meende dat we toen gezien hadden dat er een mogelijkheid was om een variante zo te bepalen, dat ze in andere sub's kan gebruikt worden.
Het rapport opent van een formulier; maandelijks krijgen de kernleden een lijst van wie verjaart.
Dus wil ik de leden die voor per kernlid belangrijk zijn, in kleur.

Ik stel vast dat ik een fout heb gemaakt; het is niet If [Familienaam]= kernlid maar
Code:
If [Kernlid]="xxxx"
            [Familienaam].ForeColor = 255
            [Geb_dat].ForeColor = 255
            [Tekst14].ForeColor = 255
        Else
            [Familienaam].ForeColor = 0
            [Geb_dat].ForeColor = 0
            [Tekst14].ForeColor = 0
    End If
kernlid is het vierde gegeven per persoon.
Uw oplossing OpenArgs is mij niet bekend, maar ga het opzoeken en zien of het me lukt het toe te passen.

Als ik het goed begrepen heb, moet dat gebruikt worden bij het formulier.
(Een besturingselement waar ik de naam invul? maar is het dan Me.OpenArgs ?).
Ik laat u zeker weten of het me lukt.

En sorry voor de vergissing.
 
Vergissen is menselijk :). Als je een formulier of rapport opent met VBA kun je argumenten meegeven, die je tegenkomt als je komma’s typt. Zoals een status (AcNew, acEdit etc.) en, als laatste: het OpenArgs argument. Daar zet je dan je variabele neer, die je dan uit een tekstveld op je formulier haalt. In je opdrachtregel staat dan: OpenArgs:=Me.Kernlid.Value.
In het rapport of formulier dat je vervolgens opent, gebruik je het OpenArgs argument om te filteren.
Code:
    If [Kernlid] = Me.OpenArgs Then
            [Familienaam].ForeColor = 255
            [Geb_dat].ForeColor = 255
            [Tekst14].ForeColor = 255
        Else
            [Familienaam].ForeColor = 0
            [Geb_dat].ForeColor = 0
            [Tekst14].ForeColor = 0
    End If
 
Uw eerste antwoord heeft me op de goede weg gezet (we zijn gelijktijdig bezig!!!): ik heb op het formulier een nieuw Keuzelijst met invoervak (Vraagster) gecreeerd en dat als volg verwerkt :

Code:
     If [Kernlid] = [Forms]![frmgeboortedatum]![Vraagster] Then
            [Familienaam].ForeColor = 255
            [Geb_dat].ForeColor = 255
            [Tekst14].ForeColor = 255
        Else
            [Familienaam].ForeColor = 0
            [Geb_dat].ForeColor = 0
            [Tekst14].ForeColor = 0
    End If
Op die manier zijn de leden die het betrokken kernlid bezoekt en in de betrokken maand verjaren in kleur; de anderen gewoon zwart.
Dit is wat is wou.
Maar nu ga ik ook proberen uw voorstel met OpenArgs toe te passen.
Daar u "Me." gebruikt neem ik aan dat het moet volgen op
Code:
DoCmd.OpenReport "rpt_per_maand", acViewPreview, , "month(geb_dat) = " & (Me!tmaand)
Ik ga het alvast verder uitproberen.
Nogmaals bedankt voor de hulp.
Laat nog weten of ik er in slaag.
 
Er staat niet voor niks Me. (Punt) en geen Me! (Uitroepteken) :).
 
Dat is een beetje mijn probleem nu dat ik moet herzien: wanneer Me. of wanneer Me!
En ook die OpenArgs zal nog wat inspanning vragen, totaal nieuw voor mij.

Wat mijn oorspronkelijke vraag betreft, kan dat te maken hebben met de bepaling van de Sub (Private of Public) en bepalen van een functie?
U ziet, ik heb werk genoeg voor de boeg.
Laat nog van me horen.
 
nu dat ik moet herzien: wanneer Me. of wanneer Me!.
Dat is een simpele vraag, als je weet hoe je er mee moet werken. De punt gebruik je als je objecten uit een bron ophaalt, zoals tekstvakken of eigenschappen van een formulier. Me.Recordsource = strSQL, en Me.txtKernlid = “xxx” zijn daar voorbeelden van. Het uitroepteken gebruik je als je objecten uit een collectie haalt, zoals een veld uit een recordset.

Omdat een formulier vaak een tabel of query als recordset heeft, kun je een veld dus op twee manieren uit dat formulier halen: Me.txtKernlid = “xxx” vult het tekstvak op het formulier (Me is dan de Parent) en Me![Kernlid] = “xxx” vult het veld dat in de recordset zit. Het resultaat is in dit geval hetzelfde (als het veld is gekoppeld aan het tekstveld), het gebruik is significant anders: objecten of eigenschappen die je met een punt aanroept gebruiken IntelliSense, wat de kans op foute code aanzienlijk vermindert en het aantal aanslagen ook. Gebruik je een Uitroepteken, dan moet je de volledige syntax intypen en heb je geen controle op fouten. Drie keer raden wat ik het meeste gebruik :).
 
Bedankt voor de uitleg.
Daar kom ik al een heel eind verder mee; zoek in de toepassingen van de avondlessen, een cursus hebben we niet gekregen.
Raadpleeg wel de gratis cursus Acces, maar weinig info over VBA.
 
Dat is dan niet de cursus die ik heb geschreven voor HelpMij :).
 
Wat mijn oorspronkelijke vraag betreft, kan dat te maken hebben met de bepaling van de Sub (Private of Public) en bepalen van een functie?
Wat bedoel je hier mee? Ik dacht dat je oorspronkelijke vraag was opgelost (met de OpenArgs truc)?
 
Dat is dan niet de cursus die ik heb geschreven voor HelpMi

Ik heb het over de Gratis Cursus Access; dus is er nog een andere.
Waar vind ik die?

Wat mijn oorspronkelijke vraag betreft, kan dat te maken hebben met de bepaling van de Sub (Private of Public) en bepalen van een functie

Het klopt dat ik de oplossing goed vindt; de vraag was meer om te weten of ik het juist voorhad (cursus al heel lang geleden).
Maar u heeft gelijk, is niet meer noodzakelijk.
 
Ook die van HelpMij is gratis :). Hij staat in de Handleidingen sectie. Als je daar kijkt in de categorie <Office suite> vind je alle afleveringen (zo'n 26).
 
Sorry hoor, maar...
Dat was een spam melding. Die kun je het beste melden bij de moderator (met de knop <Attendeer moderator> linksonder in het bericht) en dan wordt het bericht vrij snel verwijderd.
 
Bedankt om me hierop te wijzen.
Begreep er niks van, gelukkig was het wel snel verwijderd.

Maar had niet onmiddellijk door dat het spam was. Wist niet dat het hier ook voorkwam.

Groeten
Jempi
 
Helaas, dat gebeurt ook bij HelpMij. Gelukkig niet zo vaak meer als vroeger. Wat dat betreft heeft HelpMij wel geschikte beheerders die daar heel attent op zijn. Vandaar dat ik 'm gelijk gerapporteerd heb middels die knop, en hij snel werd verwijderd. Meestal blokkeren ze dan ook de gebruiker die 'm gepost heeft. In het verleden zag je die dan ook wel weer vrij snel terug met een nieuw account, en begon het feest weer opnieuw. Zoals ik al zei: het is tegenwoordig vrij goed geregeld :D.
 
In uw eerste antwoord vroeg u
Code:
Waarom gebruik je geen Voorwaardelijke opmaak?
In Acces 2003 is dat niet beschikbaar of... zoek ik verkeerd?

OpenArgs heb ik nog niet gevonden in de cursus.
Is er een manier om dat snel te vinden, moet nu hoofdstuk per hoofdstuk aflopen.
Leerrijk maar zou toch graag eerst eens uw voorstellen uitproberen.
 
Er is geen index van wat waar staat in de hoofdstukken, vrees ik. Daar is wel eens om gevraagd, maar ben ik nooit aan toegekomen. En dat zal nog wel even zo blijven vrees ik :). OpenArgs is ook dermate klein en simpel dat het waarschijnlijk ook geen eigen hoofdstuk heeft. Nogmaals dus het principe.
1. Bij het openen van een rapport op formulier kun je parameters meegeven, gescheiden door een komma. Eén van die parameters is OpenArgs. OpenArgs is altijd een string.
2. Je gebruikt hem zo: DoCmd.OpenForm "frmArtikelen", DataMode:=acFormAdd, WindowMode:=acDialog, OpenArgs:="Nieuw"
3. Op het formuiler dat je opent, lees je de parameter weer uit in een procedure.
4. Er kan maar één string worden meegegeven in het argument. Wil je meerdere waarden meenemen, dan moet je die samenvoegen in één string met een scheidingsteken.

Code:
Private Sub Form_Load()
    If Me.OpenArgs = "Nieuw" Then
        Me.AllowAdditions = True
        Me.omschrijving.SetFocus
    ElseIf Me.OpenArgs = "Bewerken" Then
        Me.inkoopprijs.SetFocus
        Me.inkoopprijs.SelStart = 1
    End If
End Sub

Dit voorbeeld gebruikt OpenArgs om te bepalen of er een nieuw record moet worden aangemaakt, of een veld moet worden bewerkt. Maar je kunt dus ook waarden meegeven. Zoals ik in punt 4 al zei, moet je die met een scheidingsteken separeren. Iets als: "123|Jansen|Dorpsstraat|25|1232AQ|Brunssum" zou bijvoorbeeld gebruikt kunnen worden om een nieuwe klant aan te maken op het klantenformulier. Ik gebruik dan het SPLIT commando om de waarden te scheiden en een lus om ze op de juiste velden te zetten.

Kom je er niet uit, dan kun je toch beter een voorbeeldje neerzetten, dan kijken we in jouw db mee, dat werkt altijd beter.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan