|
Ottenere un messaggio di avviso impostato su un
controllo di una data. -
dal 04/09/04 pagina vista:
6719
volte
Una domanda
rivoltami è il motivo di questo articolo: disponendo di un database di Nomi
e relativa data di nascita (oltre ad altri dati correlati), si vuole essere
avvisati quando è il compleanno di un nominativo inserito nel database.
L'esercizio si presta comunque a innumerevoli utilizzi, legati comunque a
controlli su date, ma veniamo all'esercizio. Supponiamo di avere un database
come questo, con i campi "Nominativo", "Nato a:", "Nato il:", ed altri campi
che vorrete:
I concetti sono
semplici: controllare con la data del giorno (in cui si apre la cartella),
tutte le date di nascita contenute nella colonna D, e trovata corrispondenza
del giorno e del mese, avvisare con un messaggio. Inseriamo le istruzioni in
un modulo standard creando una macro, che poi potremo richiamare in diversi
modi:
-
Inserendo un
pulsante sul foglio di lavoro, ed associando il pulsante al nome della
macro. Saremo noi a lanciare la macro.
-
All'apertura della
cartella, in modo da essere avvisati subito dei compleanni che ricorrono.
Per questo useremo l'evento Workbook_Open,
posizionando nell'evento il richiamo alla macro, così:
-
Private Sub Workbook_Open()
BuonCompleanno 'nome della macro
End Sub
-
Oppure
all'apertura di un determinato Foglio di lavoro, sfruttando l'evento
Worksheet_Activate, per esempio del Foglio2,
così (ricordo che ogni foglio ha i propri eventi, relativi a quel foglio):
-
Private Sub Worksheet_Activate()
BuonCompleanno 'nome della macro
End Sub
Vediamo la routine
da inserire in un modulo, e in verde i commenti:
|
Sub BuonCompleanno()
Dim Zona
Dim CL As Object
'sotto: impostiamo con
"Zona" l'area su cui eseguire il ciclo di ricerca: la colonna D del
'foglio1, a partire dalla cella D3 e, verso il basso, fino che
esistono celle occupate
Set Zona = Worksheets("Foglio1").Range([D3], [D3].End(xlDown))
'sotto: iniziamo il ciclo
che controllerà una per una, tutte le celle nell'area "Zona"
For Each CL In Zona
'sotto: con la variabile
"anni" reperiamo la differenza in anni tra la data contenuta nella
'cella e la data del giorno corrente, usando la funzione
DateDiff (vedi
l'altro sito, sez. 'vba), questo ci servirà per indicare el messaggio
di avviso quanti anni ha il nominativo 'così trovato
anni = DateDiff("yyyy", CL.Value, Now)
'sotto: con la variabile "giornomese"
reperiamo con la funzione Mid
(vedi l'altro sito, sez. 'vba) solo il giorno e il mese della data del
giorno, necessaria per eseguire il controllo.
giornomese = Mid(Now, 1, 5)
'sotto: con If impostiamo
il controllo condizionale: se il giorno e il mese presenti nella cella
'(CL) sono uguali alla variabile "giornomese" allora:
If Mid(CL.Value, 1, 5) = giornomese Then
'sotto: con la variabile
"nome" reperiamo il nominativo che si trova due colonne a sinistra,
'stessa riga (Offset(0, 2) rispetto alla cella in quel momento
controllata
nome = CL.Offset(0, -2).Value
'sotto: e si avvisa con il
messaggio che lega il nome e gli anni
MsgBox "Oggi è il compleanno di " & nome & " e compie " & anni & "
anni."
End If
Next
End Sub |
e questi saranno i risultati che vengono ovviamente
visualizzati in sequenza, uno dopo l'altro:
Ognuno potrà
decidere di visualizzare il messaggio a lui più congeniale variando il
contenuto del messaggio stesso.
Buon lavoro.
prelevato sul sito
www.ennius.altervista.org
|