Non ci sarebbe un modo per stabilire una "convalida dati" via VBA?
Del tipo: voglio scrivere un valore in una cella dell'intervallo bloccabile, verifico che quella cella che sta cambiando effettivamente sia bloccata dal parametro e dunque impedisco (o cancello) l'inserimento del nuovo valore (lanciando sempre l'avvertimento).
Assolutamente si, ma avevo capito volessi proprio evitare la scrittura (messaggi con Gianfranco (ciao) da cui ho capito non volessi l'avviso, ma il blocco).
In questo caso sarebbe tutto più semplice, l'evento Change serve a verificare cosa hai scritto nella cella, se non passa la convalida, che praticamente in VBA ormai è scritta per come deve realmente essere, cancella il contenuto e mostra l'avviso e, se vuoi, si sposta anche sulla cella che blocca l'inserimento.
Ho visto che sei brava, per quello mi sono permesso di darti alcuni consigli e qualche spunto in più, se vuoi provare questo codice:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strMsg As String, strTitle As String, rngCell As Range
'Inizializzazione delle variabili
strMsg = "La cella selezionata non prevede l'inserimento dati!"
strTitle = "Attenzione"
'Controlla che sia stata selezionata una cella presente nell'intervallo bloccabile più ampio
If Not Intersect(Target, [CelleProtetteEsterne]) Is Nothing Then
Application.EnableEvents = False ' disabilita gli eventi
If Target.Count = 1 Then 'Controlla che sia stata selezionata solo una cella
If Cells(Target.Row, [ControlloRF].Column).Value = [BloccoRF] Then ' se il regime fiscale non consente modifiche ...
If Not Target.Value = "" Then
Target.Value = "" ' ... elimina quanto inserito
MsgBox strMsg & Chr(10) & "Modificare il regime fiscale", vbExclamation, strTitle ' avverte l'utente
End If
Else
If Not Intersect(Target, [CelleProtetteInterne]) Is Nothing Then ' altrimenti controlla il perimetro interno
If Cells(Target.Row, [ControlloTI].Column).Value = [BloccoTI].Value Then ' se il tipo di invio non permette di scrivere ...
If Not Target.Value = "" Then
Target.Value = "" ' ... elimina quanto inserito
MsgBox strMsg & Chr(10) & "Modificare il regime fiscale", vbExclamation, strTitle ' avverte l'utente
End If
End If
End If
End If
Else
For Each rngCell In Target
If Cells(rngCell.Row, [ControlloRF].Column).Value = [BloccoRF] Then ' se il regime fiscale non consente modifiche ...
If Not rngCell.Value = "" Then
rngCell.Value = "" ' ... elimina quanto inserito
MsgBox strMsg & Chr(10) & "Modificare il regime fiscale", vbExclamation, strTitle ' avverte l'utente
End If
Else
If Not Intersect(rngCell, [CelleProtetteInterne]) Is Nothing Then ' altrimenti controlla il perimetro interno
If Cells(rngCell.Row, [ControlloTI].Column).Value = [BloccoTI].Value Then ' se il tipo di invio non permette di scrivere ...
If Not rngCell.Value = "" Then
rngCell.Value = "" ' ... elimina quanto inserito
MsgBox strMsg & Chr(10) & "Modificare il regime fiscale", vbExclamation, strTitle ' avverte l'utente
End If
End If
End If
End If
Next rngCell
End If
Application.EnableEvents = True ' riattiva gli eventi
End If
End Sub
Fai sapere,
ciao.