Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Martina,
Se condivido il file Excel con altri utenti, tipicamente uso "convalida dati" con "rifiuta immissione" nel caso che venisse digitato, nella cella, del testo non congruente con le opzioni presenti nell'elenco a discesa che ho appositamente creato.
Funziona correttamente.
Fino a quando un utente non prende un'altra cella, la copia interamente (non solo il testo ma proprio tutta la cella), e la incolla sopra la cella con convalida dati.
Da lì si annulla il vincolo che avevo impostato.
Come posso ovviare e bloccare anche il paste di altre celle?
Per impedire la rimozione della convalida dei dati, crea il nome definito Intervallo per l'intervallo di interesse e prova il seguente approccio VBA ,il quale è basato sui suggerimenti di John Walkenbach:
- Fai clic dx sulla linguetta del foglio di interesse
- Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
- Incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Private Sub Worksheet_Change(ByVal Target As Range)
Const sIntervallo_Convalida_Dati = "Intervallo" '<<=== Modifica
If HasValidation(Range(sIntervallo_Convalida_Dati)) Then
Exit Sub
Else
On Error GoTo XIT
With Application
.EnableEvents = False
.Undo
Call MsgBox( _
Prompt:="La tua ultima operazione è stata annullata." _
& vbNewLine & " perchè avrebbe cancellato" _
& " le regole di convalida dei dati.", _
Buttons:=vbCritical, _
Title:="COPIA CANCELLATA!")
End With
End If
XIT:
Application.EnableEvents = True
End Sub
'--------->>
Private Function HasValidation(r) As Boolean
Dim X As Variant
On Error Resume Next
X = r.Validation.Type
If Err.Number = 0 Then
HasValidation = True
Else
HasValidation = False
End If
End Function
'<<=========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel.
- Salva il file con l'estensione xlsm.
Potresti scaricare il mio file di prova Martina20190206.xlsm
===
Regards,
Norman