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