codice:
Dim myDate As Date
Dim MyData As Long
Dim MyCont As String
Dim DBCorrente As Database
Dim i
Private Sub Comando13_Click()
Set DBCorrente = CurrentDb
If IsNull(Me!NrSedute) Or IsNull(Me!Data) Then
MsgBox "campo nr sedute e data prima seduta obbligatori" & Chr(13) & "verifica che siano stati compilati"
Else
Application.SetOption "Confirm Action Queries", False '-->ELIMINA IL MESSAGGIO PREDEFINITO DI ACCESS PER LA CONFERMA DELLE AZIONI TRAMITE COMANDI SQL
MyCont = Forms!m_inser_multiplo!NrSedute '-->IMPONE ALLA VARIABILE MyCont IL VALORE NECESSARIO PER ESEGUIRE IL CICLO
MyData = Forms!m_inser_multiplo!Data '-->IMPONE ALLA VARIABILE MyData IL VALORE
'INIZIO CICLO PER INSERIMENTO DEGLI APPUNTAMENTI
For i = 1 To MyCont
myDate = year(MyData) & "/" & Month(MyData) & "/" & Day(MyData) '-->IMPONE ALLA VARIABILE MyDate IL VALORE
Festivo '--> FA PARTIRE LA FUNZIONE FESTIVO PER LA VERIFICA DEI GIORNI
MyData = MyData + 1 '-->AUMENTA IL VALORE DELLA DATA DI UN GIORNO
Next
Application.SetOption "Confirm Action Queries", True '-->RIPRISTINA IL MESSAGGIO PREDEFINITO DI ACCESS PER LA CONFERMA DELLE AZIONI TRAMITE COMANDI SQL
DoCmd.Close acForm, "m_inser_multiplo", acSavePrompt '-->CHIUDE MASCHERA
Forms!Privato![appuntamenti sottomaschera].Form.Requery '-->ESEGUE REQUERY SULLA SOTTOMASCHERA
End If
End Sub
' VERIFICA SE LA DATA E' UN GIORNO FESTIVO IN ITALIA
Public Function Festivo()
Dim FESTA As String
If Weekday(myDate) = 7 Then '-->VERIFICA SE IL GIORNO CADE DI SABATO
FESTA = "SABATO"
GoTo MESSAGGIO
ElseIf Weekday(myDate) = 1 Then '-->VERIFICA SE IL GIORNO CADE DI DOMENICA
FESTA = "DOMENICA"
GoTo MESSAGGIO
Else '-->NEL CASO SIA GIORNO FERIALE
Select Case myDate '-->VERIFICA LA DATA PER VEDERE SE APPARTIENE A QUALCHE FESTIVITA'
'1. GENNAIO NUOVO ANNO
Case DateSerial(year(myDate), 1, 1)
FESTA = "1° DELL'ANNO"
GoTo MESSAGGIO
'6.GENNAIO - EPIFANIA
Case DateSerial(year(myDate), 1, 6)
FESTA = "EPIFANIA"
GoTo MESSAGGIO
'25 Aprile
Case DateSerial(year(myDate), 4, 25)
FESTA = "25 APRILE"
GoTo MESSAGGIO
'1. MAGGIO FESTA LAVORATORI
Case DateSerial(year(myDate), 5, 1)
FESTA = "1° MAGGIO (FESTA DEI LAVORATORI)"
GoTo MESSAGGIO
'2. GIUGNO FESTA DELLA REPUBBLICA
Case DateSerial(year(myDate), 6, 2)
FESTA = "2 GIUGNO (FESTA DELLA REPUBBLICA)"
GoTo MESSAGGIO
'PASQUA
Case Easter(year(myDate))
FESTA = "PASQUA"
GoTo MESSAGGIO
'LUNEDI DI PASQUA
Case Easter(year(myDate)) + 1
FESTA = "LUNEDI' DELL'ANGELO"
GoTo MESSAGGIO
'15. AGOSTO
Case DateSerial(year(myDate), 8, 15)
FESTA = "FERRAGOSTO"
GoTo MESSAGGIO
'1. NOVEMBRE - TUTTI I SANTI
Case DateSerial(year(myDate), 11, 1)
FESTA = "TUTTI I SANTI"
GoTo MESSAGGIO
'8. DICEMBRE - IMMACOLATA CONCEZIONE
Case DateSerial(year(myDate), 12, 8)
FESTA = "IMMACOLATA CONCEZIONE"
GoTo MESSAGGIO
'9. DICEMBRE - S. AMBROGIO
'QUESTA FESTA E' PRESENTE A MILANO, PER INSERIRE QUELLA DI DOVE ABITI O LAVORI BASTA MODIFICARE IL 12 (MESE) ED IL 9 (GIORNO) CON QUELLI CORRETTI PER TE
Case DateSerial(year(myDate), 12, 9)
FESTA = "S. AMBROGIO (PATRONO DI MILANO)"
GoTo MESSAGGIO
'25. DICEMBRE - NATALE
Case DateSerial(year(myDate), 12, 25)
FESTA = "NATALE"
GoTo MESSAGGIO
'26. DICEMBRE - SANTO STEFANO
Case DateSerial(year(myDate), 12, 26)
FESTA = "S. STEFANO"
GoTo MESSAGGIO
Case Else '--> SE NON E' FESTIVO INSERISCE L'APPUNTAMENTO
DoCmd.RunSQL ("INSERT INTO Appuntamenti (ID, NrSedute, Data, Ora, Appuntamento, [Note] ) " & _
"SELECT Forms!Privato!ID AS Espr6, Forms!m_inser_multiplo!NrSedute AS Espr1, " & MyData & " AS Espr2, Forms!m_inser_multiplo!Ora AS Espr3, Forms!m_inser_multiplo!Appuntamento AS Espr4, Forms!m_inser_multiplo!Note AS Espr5")
End Select
End If
Exit Function
MESSAGGIO:
'CHIEDE SE NONOSTANTE IL GIORNO SIA FESTIVO SI VUOLE INSERIRE L'APPUNTAMENTO
Select Case MsgBox("ATTENZIONE LA DATA INSERITA RISULTA CORRISPONDERE ALLA SEGUENTE FESTIVITA':" & Chr(13) & FESTA & Chr(13) & "VUOI INSERIRLA UGUALMENTE?", vbYesNo)
Case Is = vbYes '-->SE SI INSERISCE L'APPUNTAMENTO
DoCmd.RunSQL ("INSERT INTO Appuntamenti (ID, NrSedute, Data, Ora, Appuntamento, [Note] ) " & _
"SELECT Forms!Privato!ID AS Espr6, Forms!m_inser_multiplo!NrSedute AS Espr1, " & MyData & " AS Espr2, Forms!m_inser_multiplo!Ora AS Espr3, Forms!m_inser_multiplo!Appuntamento AS Espr4, Forms!m_inser_multiplo!Note AS Espr5")
Case Is = vbNo '-->SE NO RIDUCE DI UNO IL CONTATORE DEL CICLO
i = i - 1
End Select
End Function
' CALCOLO DELLA PASQUA
' Questa funzione non è mia ma è recuperata dal WEB
Function Easter(year As Integer) As Date
Dim d As Integer
d = (((255 - 11 * (year Mod 19)) - 21) Mod 30) + 21
Easter = DateSerial(year, 3, 1) + d + (d > 48) + 6 - _
((year + year \ 4 + d + (d > 48) + 1) Mod 7)
End Function
la funzione 'festivo' e 'calcolo della pasqua' non sono mie ma le trovo molto buone, ho pensato di inserirle così che il problema che hai posto sia risolto anche per altri giorni di festività.