Controllo immissione dati

Questa routine consente di verificare se i dati che vengono inseriti in una cella corrispondono a parametri fissi stabiliti in precedenza. Facciamo un esempio: nella zona che comprende tutte le celle da A1 a F100 vogliamo  inserire solo lettere che corrispondano ad A, B, C, D, E, e che ci venga segnalato immediatamente se scriviamo qualunque cosa  che sia diversa: questa è la routine da inserire nell'evento Change del Foglio su cui lavoriamo: (in verde sono i commenti)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim CL As Object


For Each CL In Range("A1:F100")    'per ogni cella nella zona A1:F100
If CL.Value = "" Then GoTo 10  'se la cella è vuota passa a 10: Next (la successiva)

If CL.Value = "A" Or CL.Value = "B" Or CL.Value = "C" _
Or CL.Value = "D" Or CL.Value = "E" Then

GoTo 10       'se la cella contiene una di queste queste lettere, vai alla successiva
Else               'altrimenti
CL.Select      'seleziona la cella col valore diverso
MsgBox ("Errore.Valore non Ammesso!!")   'avvisami con questo messaggio
End If
10:
Next

End Sub

Appare evidente che potremo, modificando i parametri assegnati a CL.Value =,  eseguire controlli sia su lettere, sia su numeri, sia su frasi. Con questa soluzione avremo un controllo "predefinito" in quanto il valore da controllare nelle celle è inserito direttamente nel codice.

Se invece volessimo che il controllo fosse eseguito non su valori fissi perchè "preimpostati", ma assegnati da variabili, potremmo utilizzare delle celle (al di fuori del range su cui si esegue il controllo) nelle quali potremmo inserire dei valori che possiamo variare a nostro piacimento. Per esempio potremo assegnare le celle G1:G4 alla routine, e in queste celle scrivere ciò che vogliamo sia usato come valore di confronto. Un unico appunto: se in G1 scriviamo "pippo" (ed avremo inserito in alcune celle del range A1:F100 la stessa parola), sostituendolo in G1 con "peppo", la routine troverà "pippo" e lo segnalerà come errore. Comunque questa è la routine da usare con valori variabili:

 Private Sub Worksheet_Change(ByVal Target As Range)
Dim CL As Object


For Each CL In Range("A1:F100")    'per ogni cella nella zona A1:F100
If CL.Value = "" Then GoTo 10  'se la cella è vuota passa a 10: Next (la successiva)

If CL.Value = Range("G1").Value Or CL.Value = Range("G2").Value  _
Or CL.Value = Range("G3").Value Or CL.Value = Range("G4").Value Then

GoTo 10       'se la cella contiene un valore uguale a questi Range, vai alla successiva
Else               'altrimenti
CL.Select      'seleziona la cella col valore diverso
MsgBox ("Errore.Valore non Ammesso!!")   'avvisami con questo messaggio
End If
10:
Next

End Sub

In questo modo, ciò che verrà scritto nelle celle G1 ecc, sarà usato come valore di confronto.