[VBA] Datum (Maand & Jaar) vergelijken

Pagina: 1
Acties:
  • 2.029 views sinds 30-01-2008
  • Reageer

  • camiels
  • Registratie: Januari 2001
  • Laatst online: 14-06 16:09
Ik heb een grote tabel waar o.a. data in voor komen. Het veld datum heeft een type date/time. Nu heb ik een selectie query die via een stuk vba alleen de records die in het de huidige maand en het huidige jaar vallen moet laten zijn.

Ik heb het al op verschillende manieren geprobeerd, echter krijg ik het niet voor elkaar om alleen de maand en het jaar uit te filteren. Ook niet met bijvoorbeeld:

code:
1
2
Dim Maand = Din(Month)
Dim Jaar = Din(Jaar)


Mijn huidige code is nu als volgt, met left en right de getallen uitfilteren, dit test ik weer met msgbox en dat geeft ie eigenlijk alleen voor dag een correcte waarde. Tussendatum en Maand worden als 0 weergegeven.

Wie heeft er tips, zoektochten hier en op google onder "Comparing dates + vba" etc. hebben nog niets zinnigs gemeld.

De code waar ik nu mee bezig ben.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Option Compare Database

Function Huidige_Maand(Din As String) As Boolean

On Error Resume Next

'Functie om te kijken of een datumwaarde
'in de huidige maand valt van het huidige jaar valt.

Dim Dag As Integer
Dim TussenDatum As Long
Dim Maand As Integer
Dim Jaar As Integer

'De datum string is als volgt opgebouwd: 20-9-03 15:07:16

Dag = Left(Din, 2)
TussenDatum = Right(Din, 14)
Maand = Left(Din, 6)

MsgBox (Dag)
MsgBox (TussenDatum)
MsgBox (Maand)

End Function

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Euhm, waarom wil je die datum eerst naar een string gaan converten en waarom ga je dan zelf mbhv substringetjes enzo de jaar en maand gedeelten eruit gaan vissen?
Dat is toch echt wel prutsen hoor. Wat als je datum nu eens in een andere vorm getoond wordt?

Heeft VBA dan geen Year(), Month() , etc... functies die werken p het datetime datatype?

https://fgheysels.github.io/


  • camiels
  • Registratie: Januari 2001
  • Laatst online: 14-06 16:09
Ik weet dat dit prutsen is volgens een omweg. Echter wanneer ik het probeer met Year() Month() e.d. krijg ik totaal verkeerde datumwaarden door.

Bv. 1-1-1905

Daarbij blijft ie dus de gehele datum geven ip alleen de maand. Het lijkt wel bijna een bug ofzo.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Hoe gebruik je die functies dan wel?
Die moeten gewoon werken.

https://fgheysels.github.io/


  • camiels
  • Registratie: Januari 2001
  • Laatst online: 14-06 16:09
Wazig, nu doet ie het wel. Met de volgende code. Bedankt i.i.g. Slotje mag erop.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Option Compare Database

Function Huidige_Maand(Din As Date) As Boolean

On Error Resume Next

'Functie om te kijken of een datumwaarde
'in de huidige maand valt van het huidige jaar valt.

Dim HuidigeDag As Integer
Dim HuidigeMaand As Integer
Dim HuidigeJaar As Integer
Dim TabelDag As Integer
Dim TabelMaand As Integer
Dim TabelJaar As Integer

HuidigeDag = Day(Date)
HuidigeMaand = Month(Date)
HuidigeJaar = Year(Date)

TabelDag = Day(Din)
TabelMaand = Month(Din)
TabelJaar = Year(Din)

[ Voor 7% gewijzigd door camiels op 12-09-2003 10:57 ]


Verwijderd

Misschien een handige tip:
Je kan het ook in MSQL afvangen op de volgende manier
code:
1
2
3
   datepart(dd,datumVeld) as Dag
   datepart(mm,datumVeld) as Maand
   datepart(yyyy,datumVeld) as Jaar

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 vindt de On Error Resume Next niet zo netjes...

Immers, zo kan ik ook alle fouten wegkrijgen.. Wat er niet is, bestaat niet. 8)7

[ Voor 7% gewijzigd door gorgi_19 op 12-09-2003 11:27 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Aka "If you can't reproduce a bug it doesn't exist" :)

En wat betreft "Slotje mag erop", ik snap echt niet waarom mensen van mening zijn dat niemand meer in hun topic mag discussieren als het originele probleem opgelost is. Zoals je ziet zijn er nog genoeg meningen over je code...

Slotjes zijn voor kansloze en/of fout lopende topics, niet voor opgeloste topics, die zakken vanzelf weg. Hierdoor kun je in de search ook een bruikbaar onderscheid maken tussen nuttige en minder nuttige hits.

Professionele website nodig?


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

curry684 schreef op 12 September 2003 @ 11:36:
Aka "If you can't reproduce a bug it doesn't exist" :)
Nog erger, ik negeer een bug / alles wat fout kan gaan, dan bestaat hij niet.. :P

[ Voor 12% gewijzigd door gorgi_19 op 12-09-2003 11:40 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21-08 18:33
Beetje veel code voor zo'n onbenullige functie als je 'et mij vraagt. ( Wat je niet doet, maar dat terzijde )

Visual Basic:
1
2
3
Public Function IsCurrentMonth(  SomeDate as Date ) As Boolean
    IsCurrentMonth = ( Month( Date ) = Month( SomeDate ) )
End Function


Overigens is het handig om als datumformaat in de db en in de constanten het ISO formaat aan te houden ( YYYY-MM-dd HH:mm:ss ).

Oh ja, en On Error Resume Next is een hele grote NoNo.

[ Voor 9% gewijzigd door farlane op 12-09-2003 16:08 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1