Datum met 4digit-year

RoVo1211

Gebruiker
Lid geworden
24 feb 2024
Berichten
93
Besturingssysteem
Windows 11
Office versie
Office 365
Het klinkt heel basaal, maar ik krijg het niet voor elkaar om het jaartal met 4 cijfers te laten weergevenen daarnaar te laten zoeken met de Find-functie.
In het bestand "Aandelen_Slotkoersen.odt" staat de macrotekst met een geel gemarkeerd gedeelte.
Code:
dtVandaag = Format(Date, "dd-mm-yyyy")
'Volgens mij moet hier een datum uitkomen als "18-05-2024", maar ik krijg slechts "18-05-24"
Debug.Print Weekday(Date, vbMonday)

Select Case Weekday(Date, vbMonday)
Case Is = 1
dtVorigedag = dtVandaag - 3
Case Is = 6
dtVorigedag = dtVandaag - 1
Case Is = 7
dtVorigedag = dtVandaag - 2
End Select

VorigeDag = Format(dtVorigedag, "dd-mm-yyyy") 'hier hetzelfde als bij dtVandaag (maar dan met datum 17-05-2024), zie de output in de weergave van het venster "Direct" hier onder.
Outpunt debug.print Aandelen_slotkoersen (rgl 44-58).png
Met deze datum-notatie werkt de functie Find niet. Deze zoekt naar een datum met 4 cijfers voor het jaar.
Code:
Set rngVandaag = Sheets(4).Range("A3:A368").Find(What:=dtVandaag, LookIn:=xlValues, LookAt:=xlWhole)
Set rngVorigeDag = Sheets(4).Range("A3:A368").Find(What:=VorigeDag, LookIn:=xlValues, LookAt:=xlWhole)
Debug.Print "dtVandaag: " & vbTab & dtVandaag & vbTab & "rngVandaag: " & vbTab & rngVandaag.Address
De laatste regel "Debug.print "dtvandaag...." geeft de volgende foutmelding:
Objectvariabele of blokvariabele With is niet ingesteld.
Hoe moet ik het aanpassen zodat "Find"zoekt naar een jaar met 2 cijfers of dat er een jaartal met 4 cijfers wordt gegenereerd?
 

Bijlagen

  • Helpmij.zip
    79,7 KB · Weergaven: 4
  • Aandelen_Slotkoersen.odt
    31,5 KB · Weergaven: 2
Wijzig de opmaak van kolom A op werkblad "Jaaroverzicht(4)" in categorie: Datum, Type: *14-3-2012
 
Met alle respect Ahulpje, maar dat is het probleem niet. De celwaarden van kolom A geven al de datum met 4 jaarcijfers. Het lukt me alleen niet om dit in vba voor elkaar te krijgen.
Ik heb ook al geprobeerd om de celwaarden in kolom A naar 2 jaarcijfers te krijgen en dat lukt ook niet.
Heeft het sterretje in "*14-03-2012" nog een betekenis?
 
Je zoekt een tekst (dtVandaag is tekst) in een datumkolom.
Probeer het eens zo:
Code:
Sub Testje()
    Set rngVandaag = Sheets("Jaaroverzicht (4)").Range("A3:A368").Find(Date)
    Set rngVorigeDag = Sheets("Jaaroverzicht (4)").Range("A3:A368").Find(Date - 1)
    Debug.Print "rngVandaag: " & rngVandaag.Address & vbCrLf & "rngVorigeDag: " & rngVorigeDag.Address
End Sub
 
Wil je daarmee zeggen dat door het formatteren met "dd-mm-yyyy" de datum een tekst wordt?
 
Code:
Sub test()
    dtvandaag = Format(Date, "dd-mm-yyyy")
    Debug.Print dtvandaag, VarType(dtvandaag), TypeName(dtvandaag)
End Sub
18-05-2024 8 String
Zie: VarType constants
 
Misschien dat ik een beetje eigenwijs overkom, bij voorbaat excuses daarvoor.
Ik heb jouw testje een beetje uitgebreid, maar bij mij komt er VarType=7 en typename=date.
Ik moet wel toegeven dat ik in Windows mijn korte datum-notatie heb aangepast naar dd-mm-yyyy (was dd-mm-yy).

Hieronder mijn macro Testje:
Code:
Sub testje()

Select Case Weekday(Date, vbMonday)
Case Is = 1
    dtVandaag = Date
    dtVorigedag = Date - 3
Case Is = 6
    dtVandaag = Date - 1
    dtVorigedag = Date - 2
Case Is = 7
    dtVandaag = Date - 2
    dtVorigedag = Date - 3
End Select
fVandaag = Format(dtVandaag, "dd-mm-yyyy")
fVandaag2 = FormatDateTime(dtVandaag, vbShortDate)
fVorigeDag = Format(dtVorigedag, "dd-mm-yyyy")
fVorigeDag2 = FormatDateTime(dtVorigedag, vbShortDate)
Debug.Print Time, "fVandaag (dd-mm-yyyy): ", fVandaag, VarType(fVandaag), TypeName(fVandaag)
Debug.Print Time, "fVandaag2 (vbshortdate): ", fVandaag2, VarType(fVandaag2), TypeName(fVandaag2)
Debug.Print Time, "Fvorigedag (dd-mm-yyyy): ", fVorigeDag, VarType(fVorigeDag), TypeName(fVorigeDag)
Debug.Print Time, "fVorigedag2 (vbshortdate): ", fVorigeDag2, VarType(fVorigeDag2), TypeName(fVorigeDag2)
End Sub
output:
Schermafbeelding 2024-05-18 164632.png
De tijd had ik voor mezelf even bijgezet om te checken dat het de laatste output is.
 
Ik heb inmiddels de opmaak in kolom A van sheets(4) aangepast naar dd-mm-yyyy en nu doet de macro het wel.:D

Mijn vraag blijkt opgelost.
 
Laatst bewerkt:
"Misschien dat ik een beetje eigenwijs overkom, bij voorbaat excuses daarvoor." ;-)
Zie #2.
Overigens levert jouw testje bij mij dit op:
Code:
17:33:50      fVandaag (dd-mm-yyyy):      17-05-2024     8            String
17:33:50      fVandaag2 (vbshortdate):    17-5-2024      8            String
17:33:50      Fvorigedag (dd-mm-yyyy):    16-05-2024     8            String
17:33:50      fVorigedag2 (vbshortdate):  16-5-2024      8            String
 
Uiteindelijk heb ik jouw tip uit #2 ook gedaan, maar moest ik ook de korte datum-notatie in Windows aanpassen.
Toch bedankt voor je hulp.
Deze vraag ga ik als opgelost markeren.
 
Datums worden in XL ongeacht het format opgeslagen als getallen dus met deze in jouw ongewijzigde

bestand uit jouw 1ste post

Code:
Set rngVandaag = Range(Cells(Application.Match(CDbl(dtVandaag), Columns(1), 0), 1).Address)
Set rngVorigeDag = Range(Cells(Application.Match(CDbl(VorigeDag), Columns(1), 0), 1).Address)
Debug.Print "dtVandaag: " & vbTab & dtVandaag & vbTab & "rngVandaag: " & vbTab & rngVandaag.Address
Debug.Print "dtVorigedag: " & vbTab & dtVorigedag & vbTab & "rngVorigedag: " & vbTab & rngVorigeDag.Address

krijg ik dit als uitkomst.

Immediate.JPG
 
Bedankt voor je reactie, maar ik heb het probleem zelf kunnen oplossen door in Windows de korte datum-notatie aan te passen naar dd-mm-yyyy ipv dd-mm-yy.
 
Terug
Bovenaan Onderaan