• 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.

Datum problemen....

Status
Niet open voor verdere reacties.

NajKwin

Gebruiker
Lid geworden
24 dec 2015
Berichten
273
Hallo,

Ik heb een simpel formulier gemaakt het werkt op zich prima alleen ik kom uit het volgende niet uit


Op het moment dat ik een maand ingeef met minder dan 31 dagen geeft hij de laatste dag dubbel weer en in het geval van februari 4 keer.


ScreenHunter_23 Nov. 21 09.36.png

Wie weet hoe dit op te lossen is?
 

Bijlagen

Hallo,

In "Private Sub ComboBox1_Change()": vervang "For i = 1 To 31" door
Code:
For i = 1 To Day(WorksheetFunction.EoMonth((DateValue("1 " & Me.ComboBox1 & " " & Year(Date))), 0))
"On Error Resume Next" is trouwens overbodig.
 
De oorzaak is dat je in de code voor Combobox 1 een for-loop hebt die standaard van 1 to 31 gaat. dus herhaald hij in korte maanden de laatste dag.

een oplossing kan zijn met if test voor de gekozen maand

Code:
Private Sub ComboBox1_Change()
Dim a As Date
Me.ComboBox2.Clear

If Me.ComboBox1 = "april" Or Me.ComboBox1 = "juni" Or Me.ComboBox1 = "september" Or Me.ComboBox1 = "november" Then
    idays = 30
Else
    idays = 31
End If
If Me.ComboBox1 = "februari" Then idays = 28

For i = 1 To idays
On Error Resume Next
a = i & " " & Me.ComboBox1 & " " & Format(Date, "YYYY")
Me.ComboBox2.AddItem Format(a, "dd mmm ")
Next i
End Sub

ik heb alleen het schrikkeljaar (29 feb) probleem nog niet opgelost en daar ga je binnenkort wel tegenaan lopen omdat 2020 een schrikkeljaar is.
ook sluit ik niet uit dat er een efficientere code is. maar dit werkt wel.. :)

edit: een oplossing zoals die van Enigmasmurf bijvoorbeeld die stiekum paar minuten voor mij al postte :)
 
Laatst bewerkt:
Hallo Enigmasmurf,

Thanks werk prima

@roeljongman,

code van Enigmasmurf ondervangt het schrikkeljaar

GR Naj
 
Andere benadering

Code:
Private Sub UserForm_Initialize()
  ComboBox1.List = Application.GetCustomListContents(4)
End Sub

Code:
Private Sub ComboBox1_Change()
  If ComboBox1.ListIndex > -1 Then ComboBox2.List = Evaluate("Index(Row(1:" & Day(Application.EoMonth((DateValue("1 " & ComboBox1 & " " & Year(Date))), 0)) & "),)")
End Sub

Code:
Private Sub ComboBox2_Change()
  If ComboBox2.ListIndex > -1 Then
    Blad1.Range("e5").Value = DateValue(ComboBox2.Value & " " & ComboBox1.Value & " " & Year(Date))
    Unload Me
  End If
End Sub
 
Ter overweging; Het invoeren van een datum via het toetsenbord is vele male sneller dan via welke andere methode dan ook.:) 18-12 geeft gelijk 18-12-2019. De datum van vandaag <Crtl> + ;
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan