21. oktober 2003 - 11:10Der er
6 kommentarer og 1 løsning
OnDoubleClick event på alle datafelter
Jeg har en form vist som datasheet. Jeg vil gerne have at når man dobbeltklikker et felt i datasheetet, så bliver en anden form filtered på indholdet af det felt.
Er der en smart måde, man kan lave det, uden at man skal ind og lave en OnDoubleClick event på alle felterne. Jeg har nemlig mange felter vist på formen!
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Ja ok. Det virker! Men så har jeg bare et problem mere... Funktionen som skal kaldes, skal nemlig kunne kaldes fra flere forskellige formularer.
Jeg har lavet en funktion, som ligger i en modul:
Public Function ApplyFilterOnDataform(SourceForm As Form, FilterForm As Form) FilterForm.FilterOn = False FilterForm.Filter = "((" & SourceForm.ActiveControl.Name & ") = '" & SourceForm.ActiveControl & "')" FilterForm.FilterOn = True End Function
Når jeg indtaster dette i en OnDoubleClick event, så melder den "Invalid syntax": =ApplyFilterOnDataform(Me,Forms("OLS_Soeg"))
Det tyder på at det er kaldet med parameterne det er galt med. For hvis jeg bare kalder en en simpel funktion, fx. "public function test()" med kaldet "=test()", så er der ingen problemer.
Du kan ikke bruge Me i dette tilfælde. Me er udelukkende et VBA-objekt. Du skal i stedet bruge Form =ApplyFilterOnDataform(Form,Forms("OLS_Soeg"))
Mht den anden funktion, så kan du lave den således: Public Function ÅbnDetaljer() Docmd.Openform "DinFormular",,,"ID = " & Screen.Activeform!ID End function
Det kunne jeg ikke få til at virke. Men jeg fik mit problem løst! I stedet for at kalde funktionen med formularerne, så fjernede jeg helt parameterne, så funktionen nu ser således ud:
Public Function ApplyFilterOnDataform() Screen.ActiveForm.Form!SubformFrameData.Form.FilterOn = False Screen.ActiveForm.Form!SubformFrameData.Form.Filter = "(([" & Screen.ActiveForm.ActiveControl.Form.ActiveControl.Name & "]) = '" & Screen.ActiveForm.ActiveControl.Form.ActiveControl & "')" Screen.ActiveForm.Form!SubformFrameData.Form.FilterOn = True End Function
Og den var straks lettere at kalde. Men du har hjulpet mig meget. Du skal have tak! Du får dine points.
btw, så behøver du ikke at have din første sætning med (den med FilterOn = False). Den er overflødig. Endvidere tror jeg heller ikke at du behøver at skrive f.eks.: Screen.ActiveForm.ActiveControl.Form.ActiveControl.Name
Istedet skulle det være nok at skrive blot: Screen.ActiveControl.Name da ActiveControl altid er på Activeform!
Prøv det, da det vil gøre koden væsentligt 'pænere'.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.