highlight records in form

Status
Niet open voor verdere reacties.

anlag1

Gebruiker
Lid geworden
31 okt 2010
Berichten
144
Hallo Allemaal,
Ik heb een doorlopend formulier in een form met daarin records op basis van een query.
Daarnaast heb ik een tabel waarin records staan die ook in de query kunnen voorkomen.
De query heeft verder niets te maken met de tabel.
Nu wil ik dat de records die zowel in de tabel als in het formulier voorkomen in het formulier "gehighlight" worden.
Mijn vraag: is dit te doen, zoja, kan iemand mij een voorzetje geven, weet niet waar ik moet beginnen, heb wel iets gevonden over "highlight selected record in continuous form", maar snap niet hoe ik dat om zou kunnen bouwen.
mvrgr,
Andre:confused:
 
Hoe ver ben je gekomen?
 
dag Michel,
Ik zelf niet ver, meestal google ik naar wat bruikbaars, heb zoals ik al zei wel wat gevonden.
Vervelende is dat ik om e.o.a. reden geen bijlage kan invoegen, had je het voorbeeld willen laten zien.
sluit hier nu wel even de code bij, misschien kun je er iets over zeggen.
t' is wel een heel verhaal.
Gr.
Andre

Code:
Option Compare Database
Option Explicit

Function GetLineNumber()
Dim RS As Recordset
Dim CountLines
Dim F As Form
Dim KeyName As String
Dim KeyValue

Set F = Form
KeyName = "productId"
KeyValue = [ProductID]

         On Error GoTo Err_GetLineNumber
         Set RS = F.RecordsetClone
         ' Find the current record.
         Select Case RS.Fields(KeyName).Type
            ' Find using numeric data type key value.
            Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
            DB_DOUBLE, DB_BYTE
               RS.FindFirst "[" & KeyName & "] = " & KeyValue
            ' Find using date data type key value.
            Case DB_DATE
               RS.FindFirst "[" & KeyName & "] = #" & KeyValue & "#"
            ' Find using text data type key value.
            Case DB_TEXT
               RS.FindFirst "[" & KeyName & "] = '" & KeyValue & "'"
            Case Else
            MsgBox "ERROR: Invalid key field data type!"
               Exit Function
               End Select
         ' Loop backward, counting the lines.
         Do Until RS.BOF
            CountLines = CountLines + 1
            RS.MovePrevious
            Loop
Bye_GetLineNumber:               ' Return the result.
         GetLineNumber = CountLines
         Exit Function
Err_GetLineNumber:
      CountLines = 0
      Resume Bye_GetLineNumber
End Function


Private Sub Form_Click()
Me!ctlCurrentRecord = Me.SelTop

End Sub

Private Sub Form_Current()
Me!ctlCurrentRecord = Me.SelTop
End Sub
 
En het kan zoveel simpeler..... Maak in de koptekst van je formulier een tekstvak met de naam [txtRecID] (mag uiteraard anders..) Deze vul je met de waarde van het RecordID, meestal het sleutelveld. En vervolgens geef je alle tekstvakken een voorwaardelijke opmaak met de expressie: [txtRecID]=[SleutelveldID].
Bij de gebeurtenis <Bij Aanwijzen> van het formulier zet je dit:

Code:
Private Sub Form_Current()
    Me.txtRecID = Me.SleutelveldID
    Me.Form.Repaint
End Sub

En dat is alles...
 
Uh, dat is wel erg simpel, ik neem aan dat dit de vervanging is van de code die ik gepost heb.
Ik zal het vanavond uitproberen, heb tegelijk nog enkele vragen:
ik zie in je uitleg niets over een kleurnummer?
Wat nu als er geen sleutelveld voorhanden is?
Gr.
Andre
 
Het is geen vervanging van de code, want je hebt er verder niks voor nodig. De oplossing die je hebt gevonden stamt nog uit de tijd dat er geen voorwaardelijke opmaak in Access zat. En dan moet je nogal stevig in de bus blazen om eenzelfde effect te bereiken. Als het goed is, heb je in elk record wel ergens een uniek veld staan dat je kunt gebruiken. Voor Voorwaardelijke opmaak maakt het overigens niet uit, want je kunt ook bijvoorbeeld alle klanten uit Utrecht een eigen kleur geven, door te matchen op Plaatsnaam. 't Is maar wat je wilt bereiken. Wil je één record visueel benadrukken, bijvoorbeeld het actieve record, dan heb je een unieke waarde nodig, of een combinatie.
 
Heb het volgende gedaan, van een tabel een gegevensblad formulier gemaakt.
in de formulierkoptekst een tekstvak genaamd txtRecID geplaatst.
De besturingselementbron van het tekstvak ingesteld op ProductID
Vervolgens van het tekstvak Productname de voorwaardelijke opmaak als volgt ingesteld:
expressie is: [txtRecID]=[ProductID]
als laatste de code bij <aanwijzen> gebeurtenisprocedure ingevoegd.

Code:
Private Sub Form_Current()
    Me.txtRecID = Me.ProductID
    Me.Form.Repaint
End Sub

Bij openen formulier volgende fout melding:
"U kunt geen waarde aan dit object toekennen"

Bij foutopsporing wordt dit gemeld: Me.txtRecID = Me.ProductID
wat gaat er mis?

Gr.
Andre
 
Ik kijk er naar...
 
Geen idee waarom hij het niet doet; ik heb 'm opnieuw gemaakt (nu wel als Doorlopend formulier) en dan doet-ie het prima. Met deze code dus:

Code:
Private Sub Form_Current()
    Me.txtRecID = Me.ProductID
    Me.Repaint
End Sub

Voorbeeldje maakt het wel duidelijk...
 

Bijlagen

Laatst bewerkt:
Michel,
Bedankt, werkt perfect :thumb:
een voorbeeld zegt soms meer als duizend woorden.
Wat nu als het veld [ProductID] niet voorhanden is, en de mogelijkheid bestaat dat er twee exact dezelfde rocords in de tabel staan, moet er dan een nieuwe tabel gemaakt worden m.b.v. tabelmaakquery en deze voorzien van een veld [RecordID]?
Gr.
Andre
 
Heb een formulier "Swap connections" waarvan het laatste veld de 'som' is van [from]+[to] zoals in de afbeelding
daarnaast een tabel "tbl_different_sequence_temp" met eenzelfde veld.
Hoe kan ik er voor zorgen dat wanneer de 'som' velden in zowel de frm als tbl overéénkomen de records in het formulier "gehighlight" worden?
moet dit met code worden opgelost? dan denk ik aan [Dlookup] c.q. [formatconditions], of volstaat een expressie in de voorwaardelijke opmaak van het tekstvak?
Groet,
Andre
 

Bijlagen

  • TBL.jpg
    TBL.jpg
    93,1 KB · Weergaven: 56
Ik denk wel dat je in je formule kunt verwijzen naar een veld op het subformulier, maar ik heb het nog nooit uitgeprobeerd, dus die eer laat ik aan jou :) maak de formule met de functie <Opbouwen> om de syntax goed te krijgen, en dan moet het wel lukken.
 
Michel,
Dank je, :thumb:
ik ben al aardig op de goede weg. (denk ik):rolleyes:
Hoe kan ik het volgende oplossen: na het openen van het formulier moet ik eerst alle records even langs om van de betreffende records de voorwaardelijke opmaak actief te krijgen. zie att.
Hoe kan ik het zo maken dat bij open de betreffende record velden direct hun kleur krijgen?
Gr.
Andre
 

Bijlagen

  • frm.jpg
    frm.jpg
    97,5 KB · Weergaven: 46
Ik zie zo gauw niet op basis waarvan je de opmaak hebt gedefinieerd, maar op zich klopt dat wel; als je de techniek hebt gebruikt uit mijn voorbeeld, dan wordt de opmaak geactiveerd op basis van het actieve record. Dus je moet ze allemaal actief selecteren voordat de opmaak gaat werken. Maar jij wilt dus iets anders dan het actieve record markeren....
 
Ik heb op jouw aanwijzingen een subform gemaakt van de tabel waar ik mee wil vergelijken, deze gekoppeld en een expressie in voorwaardelijke opmaak van het laatste veld in hoofdformulier gezet die de gekoppelde velden vergelijkt, wanneer beide gelijk zijn "kleurt" het veld, zoals ik al aangaf moet ik eerst alle records lang om te "kleuren"
De kleuren blijven overigens wel, ook als de record niet actief is.

Nu wil ik bij het openen van het hoofdformulier direkt de betreffende records gekleurd hebben zoals weergegeven bij de vorig post aanwezige bijlage, hierin is het subformulier niet te zien, heb zichtbaar "uit" staan, omdat deze verder niet getoont hoeft te worden.
Gr.
Andre
 
Is opgelost, heb een query met 3 tabellen één van die tabellen is een history tabel
in de voorwaardelijke opmaak van de betreffende velden een expressie met voorwaarden geplaatst
dank voor de hulp
Groet
Andre
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan