• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

vba datum naar weeknummer

Status
Niet open voor verdere reacties.

badkarma1976

Nieuwe gebruiker
Lid geworden
12 sep 2023
Berichten
3
Hallo allemaal,

Ik ben bezig met een project in Excel waarbij ik doormiddel van een Userform een datum wil laten invullen. Deze datum wil ik in een Excel blad wegschrijven waarbij in de cel naast de datum het bijbehorende weeknummer wordt weergegeven. Het wegschrijven van de datum lukt zonder problemen. Echter het weeknummer wordt weergegeven alsof de datum in de 'Amerikaanse' notatie is weergegeven (datum 12-01-2023 geeft nu weeknummer 48 terwijl dit weeknummer 2 zou moeten zijn). Ik gebruik de volgende code in VBA:

ws.Range("A" & LastRow).Offset(0, 1).Value = Datum.Value
ws.Range("A" & LastRow).Offset(0, 2).Value = WorksheetFunction.WeekNum(Datum.Value)

waarbij Datum.Value de datum is die in het userform wordt ingevuld.

Hoe kom in aan het weeknummer dat correspondeert met de Europese datumnotatie?

Alvast dank voor de reacties.
 
Zo:
Code:
WorksheetFunction.WeekNum(DateSerial(Year(Datum.Value), Month(Datum.Value), Day(Datum.Value)))
 
Zo:
Code:
WorksheetFunction.WeekNum(DateValue(Datum.Value, 21)
 
Als je niet vertelt waar 'datum' voor staat (combobox, textbox, Listbox) is het gokken.

Code:
ws.cells(rows.count).end(xlup).offset(,1).resize(,2)=array(format(datum,"yyyy-mm-dd"),application.weeknum(datum,21)
 
Allereerst dank voor de reacties. Helaas werken de aangereikte oplossingen niet helemaal. Als ik de volgende code gebruik:

ws.Range("A" & LastRow).Offset(0, 1).Value = Datum.Value
ws.Range("A" & LastRow).Offset(0, 2).Value = WorksheetFunction.WeekNum(DateSerial(Year(Datum.Value), Month(Datum.Value), Day(Datum.Value)))

Gaat het goed bij 12-01-2023 (dan wordt week 2 gegeven) als ik echter 11-09-2023 invul wordt week 45 als output gegeven terwijl dit week 37 moet zijn.

Suggesties om dit goed te krijgen ??
 
Net nog even wat lopen proberen en de volgende code lijkt te doen wat ik wil:

ws.Range("A" & LastRow).Offset(0, 1).Value = DateValue(Format(Datum.Value, "dd-mm-yyyy"))
ws.Range("A" & LastRow).Offset(0, 2).Value = WorksheetFunction.WeekNum(DateSerial(Year(Datum.Value), Month(Datum.Value), Day(Datum.Value)))

Super bedankt voor jullie snelle hulp !!! :)
 
die "21" is blijkbaar een overbodige parameter ?
Je zit in amerikaanse weken te rekenen ipv van onze gestandaardiseerde ISO-weeknumering.
Sommige jaren gaat dat goed, andere jaren iets minder.
 
Laatst bewerkt:
Code:
Sub jec()
Debug.Print DatePart("ww", Date, 2, 2)
End Sub
 
En zo ?
Code:
ws.Range("A" & LastRow).Offset(0, 2).Value = WorksheetFunction.WeekNum(format(Datum.Value,"mm-dd-yyyy"))
 
waarom de moeite doen om je datum naar een tekst om te zetten, de functie vraagt naar een serieel getal ? En waarom die 21 niet gebruiken of anders de isoWeekNum-functie binnen VBA

Code:
Sub iso()
     MijnDatum = DateSerial(2027, 1, 1) 'minder gelukkig ISO-Jaar
     MsgBox WorksheetFunction.IsoWeekNum(MijnDatum) & vbLf & WorksheetFunction.WeekNum(MijnDatum, 21)
End Sub
en verder
=WEEKNUMMER(A2;21)
=ISO.WEEKNUMMER(A2)
 

Bijlagen

  • Badkarma.xlsb
    18,3 KB · Weergaven: 12
Laatst bewerkt:
Omdat er nog steeds geen antwoord is op de vraag van snb in #4.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan