04. februar 2009 - 15:54Der er
17 kommentarer og 1 løsning
Kontrol af antal arbejdede timer efter klik på afkrydningsfelt
Jeg har en fortløbende formularer med følgende overskrifter:
ID Tilføj/Fjern Navn Afdeling
Tilføj/Fjern er et afkrydningsfelt.
Når brugeren klikker på afkrydningsfeltet ud for en given medarbejder, skal følgende ske:
1) Systemet skal kontrollere, om personen har arbejdede timer i tabellen "Arbejdede Timer" under overskriften "Man Hours".
2) Hvis "Man Hours" for medarbejderen, hvis afskydsfelt er blevet klikket på, er nul, så tillad afklikning.
3) Hvis "Man Hours" for medarbejderen, hvis afskydsfelt er blevet klikket på, er større end nul, så tillad ikke afklikning og kom med besked "Medarbejderen har arbejdede timer og du kan ikke afklikke".
I afkrydsningsfeltets FørOpdatering hændelse lægger du:
Private Sub DitFelt_BeforeUpdate(Cancel As Integer) If Me.DitFelt then If DCount("Man Hours","Arbejdede Timer","MedarbejderID=" & Me.ID) > 0 then MsgBox "Medarbejderen har arbejdede timer og du kan ikke afklikke" Cancel=True End If End If End Sub
Ret selv diverse feltnavne, så de passer til din base.
Jeg læste "Hvis "Man Hours" for medarbejderen ... er nul, så tillad afklikning" som "Tillad at feltet markeres, hvis antal timer er nul" - og det er det, koden gør.
Hvad mener du med termen "afklikning"? Mener du sætte eller fjerne markeringen?
Prøv lige at beskrive hvad det er, du ønsker, på en lidt anden måde.
Hvad er reglerne helt præcist for at du må sætte hhv. slette markeringen?
Som jeg forstår det nu, skal det måles på antallet af arbejdede timer. Det kan gøres i formularens VedAktuel (Current) ved at opstille en betingelse med efterfølgende handling, hvis betingelsen er opfyldt, og en anden handling hvis betingelsen ikke er opfyldt:
If DCount("Man Hours","Arbejdede Timer","MedarbejderID=" & Me.ID) > 0 then Me.afkrydsningsfelt.locked = True Else: Me.afkrydsningsfelt.locked = false end if
Så kan du jo bruge mugs' udgave - eller bare vende betingelsen i min kode:
Private Sub DitFelt_BeforeUpdate(Cancel As Integer) If NOT Me.DitFelt then If DCount("Man Hours","Arbejdede Timer","MedarbejderID=" & Me.ID) > 0 then MsgBox "Medarbejderen har arbejdede timer og du kan ikke afklikke" Cancel=True End If End If End Sub
Tjah. Jeg er bange for at den generelle opfattelse af ordet "afklikket" er den modsatte af din.
Man vil kunne møde sætninger som "Hvis feltet er afklikket, så ..." eller "Sørg for at feltet er afklikket".
En mere korrekt formulering ville dog være at bruge Microsofts terminologi. Her taler man om at markere et felt eller sætte en markering. Man kunne også bruge udtrykket at "sætte et flueben".
Bemærk, at der i begge tilfælde er tale om at sætte og slette et-eller-andet. Så slipper man for den misforståelse, som forstavelsen "af-" kan medføre. Tænk på montere/afmontere eller isolere/afisolere. Og så den aktuelle klikke/afklikke. You see?
Jeg kan godt se din pointe i montere / afmontere etc. Min bemærkning var nok mest ment som en generel opfordring til en bedre forklaring på det, man som bruger egentlig mener.
Her er udtrykkene "sætte et flueben" eller "sætte en markering" udmærkede uden mulighed for forveksling.
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.