Desbloquear y bloquear hoja de Excel por VBA

Tengo un problemilla con una hoja de Excel.

Tengo unas celdas con una fórmula condicional que permite rescatar el valor de otra celda. En el caso de no cumplir la condición, me la deja vacía.

Esta hoja está protegida por mi y aquí es donde viene el problema.

Por VBA tengo el siguiente código:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'ActiveSheet.Unprotect --> esto está comentado
If Target = "" Then
Target.ClearContents
With Selection.Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="5, 6"
End With
End If

If Target <> "" Then
Target.Validation.Delete
ActiveCell.Formula = "=IF(OR(RC[-1]=""NP"",RC[-1]<5),"""",RC[-1])"
'ActiveSheet.Protect --> esto está comentado

End If

Lo que pretendo es, estando protegida la hoja, poder dar un doble click en aquellas celdas que estén sin resultado y que me salga un desplegable para seleccionar 5 o 6 y se bloquee. Y que, si hago un doble click en una celda con resultado, que me devuelva la fórmula que hay originalmente y se bloquee. Pero he tratado de mil maneras y me devuelve un error cuando pretendo seleccionar el dato del desplegable.

Espero haberme explicado claramente y que alguien me dé algo de luz al respecto.

1 respuesta

Respuesta
1

Te dejo la macro ajustada.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'x Elsamatilde
'evaluar la ubicación del Target
If Target.Address = "$F$2" Then
    ActiveSheet.Unprotect
    If Target = "" Then
        Target.ClearContents
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
            Formula1:="5, 6"
        End With
        Target.Locked = False: Target.Offset(0, 1).Select
    ElseIf Target <> "" Then
        With Target
            .Validation.Delete
            .Formula = "=IF(OR(RC[-1]=""NP"",RC[-1]<5),"""",RC[-1])"
            .Locked = True
            .Offset(0, 1).Select
        End With
    End If
    ActiveSheet.Protect , DrawingObjects:=False, Contents:=True, Scenarios:=True
End If
End Sub

Estoy acotando el rango del doble clic a una sola celda (F2). Ajusta el rango en tu modelo.

La solución está en proteger la hoja con opción de 'Modificar Objetos' . Si no tildas allí, no se permite el doble clic en la celda con validación.

* Te invito a mirar el video N° 65 de mi canal: Protección de hojas ( con los diferentes permisos)

Gracias Elsa. Lo pruebo y te digo alguna cosa. Es que mis conocimientos son escasos. 

Mil gracias. Si funciona te lo diré y finalizaré la consulta. 

Avisame si necesitas que explique el código... lo tomé tal como lo habías dejado ;)

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas