Limitar modificaciones de celdas

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("h5:h45")) Is Nothing Then
 Range("I5:I45") = Range("I5:I45") + 1
If Range("i5:i45") >= 2 Then
MsgBox ("ha superado el límite de intentos")
ActiveSheet.Unprotect "libro"
Range("h5:h45").Locked = True: Range("i5:i45").Locked = True
ActiveSheet.Protect "libro"
End If
End If
End Sub

Tengo este código, pero con error 13 lo que yo necesito es que cada una de las celdas se bloqueé si es que se intenta modificar una de ellas más de dos veces.

1 Respuesta

Respuesta
1

Si con que se intente modificar más de una vez en alguna celda ya será suficiente para bloquear todo el rango, solo necesitas un contador en una celda auxiliar, no todo un rango. Por ej:

[I5] = [I5]+1     que es lo mismo que escribir: Range("I5") = Range("I5")+1

Y luego se compara solo con I5 .. y se bloquea también solo esa celda además del rango de datos.

Sdos y valora (con Excelente o buena) si el tema queda resuelto. Sino comenta con algún ejemplo y lo seguimos tratando.

Claro, también lo intenté así, el caso es que haciendo aquello empieza el contador pero cuenta el rango, si por ejemplo cambio la celda h5 suma 1 y si cambio la celda h8 por ejemplo vuelve a sumar y llega al límite y se bloquea todo el rango, cómo hago para que al cambiar de celda se el contador sume asociado a la misma celda no al rango, o bien tener un contador asociado a cada celda 😟 please!

Intenté eso, pero en ese caso el contador suma el cambio independiente de la celda que se modifique, yo necesito que se bloquee únicamente cada celda de forma independiente si se modifica 2 veces, es decir como si cada celda tuviera un contador independiente, cómo puedo hacerlo? 😟 Please!

Solo se modifica una celda por vez... por lo tanto su fila será Target. Row y de ese modo podrás tener un contador en cada fila.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("h5:h45")) Is Nothing Then
 Range("I" & target.Row) = Range("I" & target.Row) + 1
End If
End Sub

Entiendo que debe bloquearse también por fila, al superar 2 cambios.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("h5:h45")) Is Nothing Then
  Range("I" & Target.Row) = Range("I" & target.row) + 1
'solo se bloquea la celda de la fila modificada
  If Range("i" & target.row) >= 2 Then
    MsgBox ("ha superado el límite de intentos")
    ActiveSheet.Unprotect "libro"
    Range("h" & target.row).Locked = True: Range("i" & target.row).Locked = True
    ActiveSheet.Protect "libro"
  End If
End If
End Sub

Comenta sis esto resuelve tu consulta.

Sdos!

¡Gracias! Si ha quedado perfecto

'... Ha quedado perfecto...' Te comento que se puede valorar mejor en esos casos, no solo buena ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas