Avatar billede jobba Nybegynder
21. oktober 2003 - 11:10 Der 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!
21. oktober 2003 - 11:16 #1
Lav en funktion på formularen, som f.eks. hedder "ÅbnDetaljer"

Den kunne se således ud:

Public Function ÅbnDetaljer()
  Docmd.Openform "DinFormular",,,"ID = " & Me!ID
End function

Herefter markere du alle tekstbokse i din formular (i designvisning) og finder egenskaben VedDobbeltklik og skriver:
=ÅbnDetaljer()
Avatar billede jobba Nybegynder
21. oktober 2003 - 13:09 #2
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.
21. oktober 2003 - 13:37 #3
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
Avatar billede jobba Nybegynder
21. oktober 2003 - 14:41 #4
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.
21. oktober 2003 - 14:46 #5
thnx :o)

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'.
Avatar billede jobba Nybegynder
21. oktober 2003 - 15:10 #6
COOL!
Screen.ActiveControl.Name    VIRKER!!!

Det er pisse svært at referere til objecter, som nok kræver en del erfaring.
Tak
21. oktober 2003 - 15:13 #7
ja :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester