quanti giorni nel mese (anche bisestile)

E’ un semplice snippet utilizzabile ogni volta che è utile sapere in qualunque punto del programma, data una data D nella forma gg/mm/aaaa, di quanti giorni è composto il mese preso in considerazione.

Per richiamare la funzione da una maschera, saranno sufficienti due righe simili a queste (serviranno 2 caselle di testo e un pulsante. La casella di testo Me.TestoData andrà formattata come data nella proprietà “formato”!:

Private Sub Comando1_Click()
D = Me.Testodata.Value
Me.TestoRisultato.Value = DaysInMonth(D)
End Sub

ecco il codice:

Public Function DaysInMonth(D As Variant) As Integer
Dim Bisestile As Boolean, Anno As Integer
'controlliamo se è stata passata davvero una data o qualcosa d'altro
    If VarType(D) <> 7 Then
MsgBox "Attenzione alla Funzione DaysInMonth è arrivato un dato diverso da una data gg/mm/aaaa!", vbOKOnly
Exit Function 'non è una data, esco
    End If
'controlliamo se l'anno è bisestile
' un anno bisestile è multiplo di 4, non deve essere
' divisibile per 100 tranne che non si tratti di multipli di 400
Anno = Year(D)
    If Anno Mod 400 = 0 Then
Bisestile = True
        ElseIf Anno Mod 100 = 0 Then
Bisestile = False
        ElseIf Anno Mod 4 = 0 Then
Bisestile = True
        Else
Bisestile = False
    End If
'assegniamo i valori da restituire 
'febbraio
Select Case Month(D)
    Case 2
    If Bisestile = True Then
DaysInMonth = 29
    Else
DaysInMonth = 28
    End If
'aprile, giugno, settembre, novembre sono di 30gg
    Case 4, 6, 9, 11
'tutti gli altri son 31
DaysInMonth = 30
    Case 1, 3, 5, 7, 8, 10, 12
DaysInMonth = 31
End Select
End Function

No thoughts on “quanti giorni nel mese (anche bisestile)”