Lavorare con Date o Ore. -
dal 04/09/04 pagina vista:
volte
Ancora dei
suggerimenti su come lavorare con Date oppure Ore. Premetto che le routine
di base non sono mie, ma le ho reperite sul sito
http://www.mvps.org/dmcritchie/excel/xlindex.htm (peraltro segnalato in
Libri & Link su ennius.interfree), io mi sono limitato a modificarle per
presentarvi due esercizi interessanti :
-
Un
Mini-Timer per ottenere il tempo trascorso
(magari lavorando su un Foglio).
-
La
Colorazione diversa delle celle di una
zona, per differenziare :
-
date uguali
alla data odierna
-
date successive
alla data odierna
-
date antecedenti
la data odierna
-
tutte le celle NON
contenenti una data.
-
tutte le celle
vuote comprese nell'area da controllare
-
questo esercizio
risulta utile per individuare subito, in base al colore, ciò che stiamo
cercando tra le tre opzioni evidenziate.
Vediamo subito il
primo esercizio, il Mini-Timer. Due immagini che spiegano, la prima, il
momento dell'avvio tramite pressione sul pulsante "Start", la seconda il
momento in cui si stoppa con in C2 la differenza tra avvio e stop:
Ho basato le
modifiche sulla necessità di ottenere al momento dell'avvio, una copia
dell'orario di partenza, posta in B2, in modo da ottenere la differenza in
C2 tra i due orari. Ovviamente ho inserito una condizione che rende uguale
la cella B2 alla cella A2 SOLO se la cella B2 sarà vuota, condizione che si
verifica SOLO all'avvio in quanto ad ogni avvio faccio pulire le tre celle
in modo da reinizializzare le celle. Vediamo le routine con spiegazioni, da
inserire tutte nello stesso modulo:
Dim stopit As Boolean
'variabile da inserire in
Dichiarazioni - Generale
del modulo
___________________________________________________________________
Sub startclock()
'macro assegnata al pulsante Start
stopit = False 'si imposta la variabile
stopit a Falso per poter agire con la macro clock()
[A2:C2].ClearContents 'pulisco le
celle da A2 a C2
clock 'si chiama la macro clock() e
la si lancia
End Sub
___________________________________________________________________
Sub clock() 'macro
predisposta nel modulo che svolge il compito di timer. Il concetto è
'semplice: con OnTime e TimeSerial si incrementa il valore di Now
(Adesso()) di un 'secondo, richiamando di nuovo questa stessa macro
all'infinito, fino a quando non si 'renderà stopit uguale a True
tramite la macro associata al pulsante Stop.
If stopit = True Then Exit Sub
'se stopit è uguale a True si esce dalla
routine 'interrompendo il ciclo
ActiveWorkbook.Worksheets(1).Cells(2, 1).Value =
_
Format(Now, "hh:mm:ss") 'si assegna Now e
si imposta il formato ora per la cella A2
If [A2] <> "" And [B2] = "" Then [B2] = [A2]
'si controlla se A2 contiene valori E se B2 'invece è vuoto, allora si
rende B2 uguale a A2
Application.OnTime (Now + TimeSerial(0, 0, 1)), "clock"
'vedi a inizio macro
End Sub
___________________________________________________________________
Sub stopclock() 'macro associata al
pulsante Stop
stopit = True 'si rende
stopit uguale a True così che la condizione posta ad inizio della
'macro clock() interrompa il timer
[C2].Value = TimeValue([a2]) - TimeValue([b2])
'si prende con TimeValue il valore 'contenuto
nelle due celle A2 e B2 rendendolo come orario, e si fa la sottrazione
tra il 'valore maggiore ed il minore, assegnandolo alla cella C2
[C2].Value = Format([C2].Value, "hh:mm:ss")
'indi si imposta il formato ora per C2
End Sub |
Nota: sul sito
ennius.interfree, sezione VBA, trovate articoli su
TimeValue e TimeSerial (articolo
"Calcolo date segue 3") e su OnTime (articolo
"Far lampeggiare i fonts").
Passiamo al
secondo esercizio. Come abbiamo detto in apertura, anche questa routine è
stata da me adattata per offrire un maggior numero di opzioni nel colorare
condizioni diverse. Chiunque potrà decidere di modificare le condizioni ed
il colore di riempimento, come pure il sistema per identificare l'area su
cui intervenire. Nell'esempio ho usato UsedRange per identificare tutta una
zona del foglio di lavoro dove sono presenti dati, ma potrà essere usato un
riferimento preciso con cella iniziale e finale, oppure usare il metodo End
per identificare gli estremi di un area contenente dati. Vediamo la
routine e le spiegazioni:
Sub ColoraCelle()
Cells.Interior.ColorIndex = 0 'si
impostano tutte le celle senza colore
Dim cell As Range
'dichiarazione di cell come Range
Set zona = ActiveSheet.UsedRange
'impostazione della variabile zona come UsedRange
For Each cell In zona 'per ogni cella in
zona
If IsDate(cell) Then ' si controlla se il
valore di una cella è una data, se è una data, allora:
If cell.Value > Date Then 'se il
valore della cella è maggiore rispetto alla data odierna
cell.Interior.ColorIndex = 3 'si colora
la cella di rosso
ElseIf cell.Value = Date Then 'se ancora,
il valore è uguale all data odierna
cell.Interior.ColorIndex = 6 'si colora
la cella di giallo
Else 'altrimenti, cioè se la data è
antecedente a quella odierna
cell.Interior.ColorIndex = 40 'si colora
la cella di arancione chiaro
End If 'chiude il secondo If
Else: cell.Interior.ColorIndex = 15 'in
tutti gli altri casi (se testo, numero, orario) si colora 'di grigio
chiaro
'ho aggiunto anche questa
istruzione, che in realtà serve a niente, ed è solo per mostrare 'che
si possono aggiungere ancora condizioni. Questa condizione colora di
verde chiaro 'tutte le celle vuote di zona
If cell.Value = "" Then cell.Interior.ColorIndex = 34
'questa volendo si può togliere
End If 'questa
no, chiude il primo If
Next cell 'si passa alla cella successiva
in zona
End Sub |
e questa un
immagine relativa all'esempio sopra:
Buon lavoro.
prelevato sul sito
www.ennius.altervista.org
|