Falla al aplicar un evento sobre columnas para restricción

Buen Dia, tengo un código de un evento que realizo un usuario de esta pagina, que lo que hace es restringir lo que debo de ingresar en una columna(solo se ingresa lo que yo necesito), si no escribe los datos que son, este evento elimina esos datos.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then
VALOR = UCase(Target.Value)
If VALOR <> "SI" And VALOR <> "NO" Then
Target.Select
Target.ClearContents
Exit Sub
End If
End If
-------------------------------------------------------
If Target.Column = 2 Then
VALOR2 = UCase(Target.Value)
If VALOR2 <> "ORIENTE" And VALOR2 <> "OCCIDENTE" And VALOR2 <> "COSTA" Then
Target.Select
Target.ClearContents
Exit Sub
End If
End If


End Sub

si yo inserto en las columnas datos distintos a los que debo ingresar efectivamente funciona y los elimina, el problema que tengo, es que si yo copio de otra hoja y pego en estas columnas me saca un error y lo que debería de hacer es no ingresarlos........quisiera saber para saber.¿Quién me puede ayudar con esto y que debo hacer?.

1 respuesta

Respuesta
1

Suele haber errores al copiar datos y hay que probar para corregirlos. Tampoco dices que error es y en que columna sucede.

Puedes mandarme el fichero para probar y me dices exactamente el proceso para que se origine el error.

Mi correo es [email protected]

Pon como asunto el título de la pregunta y como nombre del libro

FallaAplicarEvento.XLSM

Ya he encontrado el fallo.

Cuando se selecciona más de una celda el target es un rango de varias celdas y hay operaciones que dar error como devolver el value de ese rango.

Lo que hay que hacer es procesar celda a celda todo el rango de Target y desaparecen los errores. Adicionalmente he puesto una orden

Application.EnableEvents = False

Para que la propia macro no se llame a sí misma al cambiar el valor de las celdas.

Esta es la macro que me funciona y espero te funcione también a ti.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Celda As Range
Application.EnableEvents = False
For Each Celda In Target
   If Celda.Column = 1 Then
      VALOR = UCase(Celda.Value)
      If VALOR <> "SI" And VALOR <> "NO" Then
         Celda.Select
         Celda.ClearContents
      End If
   ElseIf Celda.Column = 2 Then
      VALOR2 = UCase(Celda.Value)
      If VALOR2 <> "ORIENTE" And VALOR2 <> "OCCIDENTE" And VALOR2 <> "COSTA" Then
         Celda.Select
         Celda.ClearContents
      End If
   End If
Next
Application.EnableEvents = True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas