Avatar billede plato Juniormester
21. marts 2014 - 07:12 Der er 11 kommentarer og
1 løsning

BETWEEN i vba problem

Hej Alle

Kan I hjælpe mig med at bruge BETWEEN i vba. Nedenstående giver ingen fejl, men virker heller ikke.

If (DateDiff >= 150) And (DateDiff <= 180) Then
MsgBox "Test"
End If

DateDiff er en udregning i Query på dato. DateDiff: Date()-[ReDate]
Avatar billede hugopedersen Nybegynder
21. marts 2014 - 09:35 #1
DateDiff er en indbygget funktion i Access som skal kaldes
DateDiff ( interval, date1, date2, [firstdayofweek], [firstweekofyear])

Så hvis du selv har lavet noget der hedder det samme, så er det et godt sted at starte med at lave det om

Hvis du sætter  >=(Date()-180) And <=(Date()-150) ind som kriterie i en query, så får du de datoer der er mellem 150 og 180 dage gamle
Avatar billede plato Juniormester
21. marts 2014 - 10:04 #2
Jeg får lavet DateDiff navnet om.

Jeg skal ikke bruge en sortering på DataDiff i min Query. Jeg har en form der lister:

Hovedrolle  DateStart  DateSlut  ReDate  DateDiff

DateDiff udregner dagene mellem Redate og Date() og giver en resultat.
Jeg vil så nå formen loader at den oplyser brugeren at
"Retræning er nødvendigt hvis DateDiff er mellem 150 og 180 dage.

Jeg kan godt i VBA skrive (I form load event)
If DateDiff > 150 Then
MsgBox "Du skal retrænes"
End if

Det virker. Men jeg kan ikke få den til at gøre det hvis jeg angiver:
Dim sWhere As String
sWhere = "(DateDiff >= 150) And (DateDiff <= 180)"
If DCount("*", "tblTraining", sWhere) > 0 Then
MsgBox "Du har et træningsforløb hvor du skal Re-trænes."
End If

Giver det mening?
Avatar billede plato Juniormester
21. marts 2014 - 10:05 #3
Eller
If (DateDiff >= 150) And (DateDiff <= 180) Then
MsgBox "Du skal retrænes"
End If
Avatar billede hugopedersen Nybegynder
21. marts 2014 - 10:50 #4
Hvis jeg prøver
  If DCount("*", "[Bil service]", "(Dato >=(Date()-180)) And (Dato <=(Date()-150))") > 0 Then
    MsgBox "Du har et træningsforløb hvor du skal Re-trænes."
  End If
så virker det meget fint  ([Bil service] er en helt tilfældig tabel jeg havde)

Jeg tror det der snyder dig er at det er en funktion du prøver at bruge som kriterie
Prøv at lave en query med de ønskede parametre og så lave en DCount på den (jeg håber snart de fjerner den fra Access - det er noget rigtig skrammel)
Avatar billede plato Juniormester
21. marts 2014 - 12:15 #5
Virker ikke hos mig. Skal lige siges jeg har lagt koden i "On load" for en subform i en tab control. Nogen betydning?
Avatar billede plato Juniormester
21. marts 2014 - 12:19 #6
DateDiff er forøvrigt lavet om til DatoDiff. Og dette er IKKE et felt i tabellen, men kun en udregning i selve Query.
Avatar billede terry Ekspert
22. marts 2014 - 09:46 #7
Just made a very simple table with on record
ID = 1
SomeField = "Hej.."


New Query qryDatoDiff
SELECT tblTraining.SomeField, 165 AS DatoDiff
FROM tblTraining;

Now in debug window (CTRL+G)

?Dcount("*", "qryDatoDiff", "DatoDiff >= 100 AND DatoDiff <= 200")

I get 1

WHY are you using tblTraining in your Dcount??

Shouldn't you use a query, hwo else you getting a calculated field?
Avatar billede plato Juniormester
24. marts 2014 - 08:20 #8
Hi Terry

I tried using DCOunt since:
If (DateDiff >= 150) And (DateDiff <= 180) Then
MsgBox "Du skal retrænes"
End If

Didnt work.

Jeg har tilknyttet min subform til en Query hvori DatoDiff: Date()-[ReDate] er udregnet.
Avatar billede terry Ekspert
24. marts 2014 - 09:35 #9
In your comment revet fre. d. 21. marts 2014 kl. 10:04:01| #2

You used dcount on the table tblTraining
If DCount("*", "tblTraining", sWhere) > 0 Then

if DatoDiff is a calculated field in a query then you should us the query in dcount and not the table

EG: Dcount("*", "qryDatoDiff", "DatoDiff >= 150 AND DatoDiff <= 180")


subform??
Avatar billede terry Ekspert
24. marts 2014 - 10:51 #10
If DCount("*", "QryGetProfileDataMainRole", "DatoDiff >=150 And DatoDiff <= 180") > 0 Then
'If DCount("*", "tblTraining", "(DatoDiff >=(Date()-180)) And (DatoDiff <=(Date()-150))") > 0 Then
    MsgBox "Du har et træningsforløb hvor du skal Re-trænes."
End If
Avatar billede plato Juniormester
24. marts 2014 - 11:17 #11
Ty very much. :)
Svaret var:
If DCount("*", "QryGetProfileDataMainRole", "DatoDiff >=150 And DatoDiff <= 180") > 0 Then
    MsgBox "Du har et træningsforløb hvor du skal Re-trænes."
  End If
Avatar billede terry Ekspert
24. marts 2014 - 11:38 #12
TY 2
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