Evitar copiar datos en una celda con lista desplegable

Tengo un hoja de excel con validación de datos con listas desplegables en algunas celdas pero si alguien hace copy-paste en toda la hoja esto borra la validación de datos y permite copiar valores que en teoría no estaban permitidos, como pudo hacer que permita hacer copy paste pero que en esas celdas no lo permita si no que a fuerza ponga el valor dentro de la lista

Respuesta
1

Me parece que la única forma de restingirlo es protegiendo la celda, pero en este caso no te serviría por que necesitas que el usuario lo complete.

Lo que se me ocurre que podes hacer es cargar una macro en la hoja que chequee lo que colocaron, si es diferente al valor que corresponde que lo elimine y le ponga la data validation

Para incorporar la macro debes abrir el asistente de visual basic (ALT+F11)

Elegir la hoja correcta y colocar la sigueinte macro:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim CPSh As Worksheet

'Defino la hoja'
Set CPSh = Sheets("Hoja1")

'Verifico si estoy en la columna 3'
If Target.Column = 3 Then

'Chequea el valor que tiene la celda'
If Target = "" Or Target = "Hola" Or Target = "Chau" Then
Else
'Vaciar el contenido de la celda'
CPSh.Cells(Target.Row, Target.Column).Value = ""
'Agregar DataValidation'
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="""Hola"";""Chau"""
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If

End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim CPSh As Worksheet

'Defino la hoja'
Set CPSh = Sheets("Hoja1")

'Verifico si estoy en la columna 3'
If Target.Column = 3 Then

'Chequea el valor que tiene la celda'
If Target = "" Or Target = "Hola" Or Target = "Chau" Then
Else
'Vaciar el contenido de la celda'
CPSh.Cells(Target.Row, Target.Column).Value = ""
'Agregar DataValidation'
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="""Hola"";""Chau"""
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If

End If

End Sub

Por Favor recuerda valorar la respuesta!

Slds

Juan

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas