Bloquear celdas cumplimentadas al cerrar Exel 2010

Hola, he estado buscando y buscando, y todavía no he encontrado solución exacta para lo siguiente: necesito que todas las celdas que estén cumplimentadas se bloqueen al cerrar la hoja excel, y sólo las que estén cumplimentadas. El resto, no.

He visto varias soluciones pero ninguna hace exactamente esto, unas protegen un rango determinado, otras protegen inmediatamente después de la edición de la celda, etc. Muchísimas gracias por adelantado.

2 Respuestas

Respuesta
1

Dante, he probado el nuevo código y funciona, pero al cerrar y abrir el libro, la primera línea es editable, pero no funcionan los desplegables de los filtros. ¿Alguna idea?

n-

He conseguido dejar la hoja tal como deseaba, y además he aprendido mucho.

Un cordialísimo saludo desde España.

Respuesta
1

Supongo que "cumplimentadas" te refieres a que la celda tenga algún valor, si es así, que la celda se bloqueé. Las celdas que están vacías no se bloqueen.

Para que las celdas puedan bloquearse, la hoja deberá estar protegida. Sigue las instrucciones.

Realiza los siguientes pasos para desbloquear todas las celdas.

1. Selecciona todas las celdas de tu hoja.

2. Selecciona el menú inicio

3. Selecciona "Formato" de la ficha "Celdas"

4. Selecciona "Formato de Celdas"

5. Selecciona la ceja "Proteger"

6. Desmarca la casilla "Bloqueada"

Ahora para que automáticamente se bloqueen las celdas cada vez que cierres el libro se bloquearán aquellas celdas que tengan un valor.

Sigue las Instrucciones para poner la macro en Thisworkbook

1. Abre tu libro de excel

2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11

3. Del lado izquierdo dice: VBAProject, abajo dale doble click a Thisworkbook

4. Del lado derecho copia la macro

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Por.DAM
ActiveSheet.Unprotect "abc"
For Each c In Sheets("Hoja1").UsedRange
    If c <> "" Then
        c.Locked = True
    End If
Next
ActiveSheet. Protect "abc"
ActiveWorkbook. Save
End Sub

Cambia en la macro las palabras "abc" por el password que desees para proteger tu hoja.

Cambia en la macro "Hoja1" por el nombre de la hoja que quieres que se le bloqueen las celdas.

Saludos. Dante Amor

No olvides valorar la respuesta.

Muchísimas gracias, Dante. Sin embargo al cerrar el libro me da el siguiente error:

"Se ha producido el error 1004 en tiempo de ejecución: No se puede asignar la propiedad Locked de la clase Range"

Un saludo

Hola, he rastreado algo más, y veo que tiene que ver algo conque en mi hoja excel tengo celdas combinadas. He visto algo de código por ahí, pero no soy muy ducho en VBA, y no sé cómo insertarlo junto con el que me has enviado. Te copio lo que he encontrado por si te es de utilidad:

Bloqueo celdas combinadas 

Un saludo,

Hola otra vez, sustituyendo en tu código "c" por cell, deja de dar el error 1004, pero sólo protege las celdas no combinadas. Un saludo

Te anexo el código para que revise las celdas que están combinadas.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Por.DAM
Application.ScreenUpdating = False
ActiveSheet.Unprotect "abc"
For Each c In Sheets("Hoja1").UsedRange
    If c <> "" Then
        If c.MergeCells Then
            rango = c.MergeArea.Address(False, False)
            c.UnMerge
            For Each celda In Range(rango)
                celda.Locked = True
            Next
            Range(rango).MergeCells = True
        Else
            c.Locked = True
        End If
    End If
Next
ActiveSheet. Protect "abc"
ActiveWorkbook. Save
End Sub

¡Muchísimas Gracias!. Funciona tal y como había deseado. Te lo agradezco en el alma.

Un saludo!!

Disculpa, ¿podríamos excluir la primera fila del bloqueo, permanentemente?. La empleo para filtrar resultados y al estar bloqueada, los desplegables no funcionan.

Muchísimas gracias otra vez,

Utiliza esta

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Por.DAM
Application.ScreenUpdating = False
ActiveSheet.Unprotect "abc"
For Each c In Sheets("Hoja1").UsedRange
    If c <> "" And c.Row > 1 Then
        If c.MergeCells Then
            c.MergeArea.Locked = True
        Else
            c.Locked = True
        End If
    End If
Next
ActiveSheet. Protect "abc"
ActiveWorkbook. Save
End Sub

Cuando proteges la hoja, debes considerar que no tendrás toda la funcionalidad de excel. En la siguiente macro estoy activando toda la funcionalidad posible cuando una hoja está protegida.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Por.DAM
Application.ScreenUpdating = False
ActiveSheet.Unprotect "abc"
For Each c In Sheets("Hoja1").UsedRange
    If c <> "" And c.Row > 1 Then
        If c.MergeCells Then
            c.MergeArea.Locked = True
        Else
            c.Locked = True
        End If
    End If
Next
ActiveSheet.Protect "abc", DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
        :=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
        AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
        AllowUsingPivotTables:=True
ActiveWorkbook.Save
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas