CISA FotoGallery

Statistiche

Tot. visite contenuti : 913862
Home Articoli tecnici Forms Scelta data da Calendario con 3 Combo(Anno, Mese e Giorno)

Scelta data da Calendario con 3 Combo(Anno, Mese e Giorno)

Premesso che le 3 Combo dovranno essere così configurate:
codice:
cboAnno
Tipo Origine Riga= Elenco Valori
Numero Colonne = 1

cboMese
Tipo Origine Riga= Elenco Valori
Numero Colonne = 2
Larghezza Colonne = 0cm;3cm
Colonna Associata=1

cboGiorno
Tipo Origine Riga= Elenco Valori
Numero Colonne = 1

 

Questo è il codice da inserire nella Form che gestirà le 3 Combo:
codice:
 

Option Compare Database
Option Explicit

Private Sub Form_Load()
    Call LoadYears(Me.cboAnno)
    Call LoadMonths(Me.cboMese)
    Call LoadDays(Me.cboAnno.Value, Me.cboMese.Value, Me.cboGiorno)
End Sub

Private Sub cboAnno_AfterUpdate()
    Call LoadDays(Me.cboAnno.Value, Me.cboMese.Value, Me.cboGiorno)
End Sub

Private Sub cboMese_AfterUpdate()
    Call LoadDays(Me.cboAnno.Value, Me.cboMese.Value, Me.cboGiorno)
End Sub

Function LoadDays(Anno As Integer, Mese As Integer, ByRef cbo As Access.ComboBox, Optional DefaultValue)
    Dim DateStart   As Date
    Dim DateEnd     As Date
    Dim DayNum      As Integer
    Dim iDay        As Integer
    
    DateStart = DateSerial(Anno, Mese, 1)
    DateEnd = DateSerial(Anno, Mese + 1, 0)
    DayNum = Day(DateEnd)
    
    cbo.RowSource = vbNullString
    For iDay = 1 To DayNum
        cbo.AddItem iDay
    Next
    If IsMissing(DefaultValue) Then
        cbo.Value = Day(Now)
    Else
        cbo.Value = DefaultValue
    End If
End Function

Function LoadMonths(ByRef cbo As Access.ComboBox, Optional DefaultValue)
    Dim iM          As Integer
    cbo.RowSource = vbNullString
    
    For iM = 1 To 12
        cbo.AddItem iM & ";" & StrConv(MonthName(iM), vbProperCase)
    Next
    If IsMissing(DefaultValue) Then
        cbo.Value = Month(Now)
    Else
        cbo.Value = DefaultValue
    End If
End Function

Function LoadYears(ByRef cbo As Access.ComboBox, Optional DefaultValue)
    Dim iM          As Integer
    cbo.RowSource = vbNullString
    
    For iM = 1950 To Year(Now) + 10
        cbo.AddItem iM
    Next

    If IsMissing(DefaultValue) Then
        cbo.Value = Year(Now)
    Else
        cbo.Value = DefaultValue
    End If
End Function


PS: Nel demo allegato è stato aggiunto qualche riga di codice, e due etichette le cui CAPTION mostrano, rispettivamente,  la data per intero e il giorno della settimana. (SV)

 

Attachments:
Download this file (cmbAnnoMeseGiorno.zip)Allegato20 Kb