Ejecutar macros en celdas protegidas

He creado unas macros en un libro de excel, las cuales insertan unos datos en celdas sin fórmulas y en celdas con fórmulas, quiero proteger las fórmulas pero al hacerlo ya no me deja ejecutar las macros en las celdas protegidas. Me podéis decir como hacer para que me deje ejecutar las macros en las celdas protegidas y en las no protegidas.

2 Respuestas

Respuesta
1

Debes desproteger la hoja ejecutar macro y volver a proteger hoja

sub protegehoja ()

ActiveSheet.Unprotect Password:="1234"

acá va tu código

ActiveSheet.Protect Password:="1234"

end sub

Si no tienes clave para proteger debes usar 

sub protegehoja ()

ActiveSheet.Unprotect

acá va tu código

ActiveSheet.Protect

end sub

visita http://programarexcel.com

Encotrarás cientos de ejemplos de macros que puedes descargar y adaptar a tus necesidades.

Respuesta

Debieras dejar escrita aquí la macro para evaluar mejor la situación.

Pero te adelanto algunos detalles: la herramienta protección permite establecer algunos permisos, como el hecho de dar formatos, insertar filas, etc. Pero si tu macro debe 'insertar' filas la protección debe permitir también la selección de las celdas bloqueadas.

La instrucción de protección sería así en ese caso:

  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowInsertingRows:=True
ActiveSheet.EnableSelection = xlNoRestrictions

En otros casos quizás debas desproteger y volver a proteger en la misma macro:

Activesheet. Unprotect

'tus instrucciones

Activesheet. Protect

Las líneas de proteccción irán con todos sus argumentos: clave, permisos, etc.

Hola Elsa, gracias por contestar mira una de las macros es esta las demás hacen lo mismo copiar datos de otra hoja y pegarlos en la hoja factura.

Las formulas estan en las columnas : F14:F35 -G14:G35-  I14:I35- J14:J35

Sub MORAL1ºCURSO()
'
' MORAL1ºCURSO Macro
'

'
Sheets("MORAL").Select
ActiveWindow.SmallScroll Down:=-6
Range("A48:C61").Select
Selection.Copy
Sheets("FACTURA").Select
Range("C14").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("E14:E27").Select
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("C14:C27").Select
With Selection
.HorizontalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("B14").Select
ActiveCell.FormulaR1C1 = "1"
Range("B15").Select
ActiveCell.FormulaR1C1 = "1"
Range("B16").Select
ActiveCell.FormulaR1C1 = "1"
Range("B17").Select
ActiveCell.FormulaR1C1 = "1"
Range("B18").Select
ActiveCell.FormulaR1C1 = "1"
Range("B19").Select
ActiveCell.FormulaR1C1 = "1"
Range("B20").Select
ActiveCell.FormulaR1C1 = "1"
Range("B21").Select
ActiveCell.FormulaR1C1 = "1"
Range("B22").Select
ActiveCell.FormulaR1C1 = "1"
Range("B23").Select
ActiveCell.FormulaR1C1 = "1"
Range("B24").Select
ActiveCell.FormulaR1C1 = "1"
Range("B26").Select
ActiveCell.FormulaR1C1 = "1"
Range("B27").Select
ActiveCell.FormulaR1C1 = "1"
Range("B25").Select
ActiveCell.FormulaR1C1 = "1"
Range("H14").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H15").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H16").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H17").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H18").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H19").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H20").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H21").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H22").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H23").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H24").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H25").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H26").Select
ActiveCell.FormulaR1C1 = "4%"
Range("H27").Select
ActiveCell.FormulaR1C1 = "4%"
Range("E4:I4").Select
ActiveWindow.SmallScroll Down:=6
End Sub

Gracias,

Un saludo

No tendrás inconveniente si la protección la realizas con los siguientes 3 permisos: seleccionar celdas desbloqueadas, aplicar formato a celdas y aplicar formato a columnas.

Con macro sería:

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True

Si tu versión Excel no te permite asignar estos permisos tendrás que desproteger la hoja y volverla a proteger en las líneas que te marco en el código, que dicho sea de paso te lo he reducido bastante:

Sub MORAL1ºCURSO()
'ajustada x Elsamatilde
' MORAL1ºCURSO Macro
'
Sheets("MORAL").Select
ActiveWindow.SmallScroll Down:=-6
Range("A48:C61").Copy
Sheets("FACTURA").Select
Range("C14").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'--------------------------desproteger con: ActiveSheet.Unprotect
Range("E14:E27").Select
With Selection
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .WrapText = False
    .Orientation = 0
    .AddIndent = False
    .IndentLevel = 0
    .ShrinkToFit = False
    .ReadingOrder = xlContext
    .MergeCells = False
End With
Range("C14:C27").Select
With Selection
    .HorizontalAlignment = xlCenter
    .WrapText = False
    .Orientation = 0
    .AddIndent = False
    .IndentLevel = 0
    .ShrinkToFit = False
    .ReadingOrder = xlContext
    .MergeCells = False
End With
'---------------------------volver a proteger con ActiveSheet.Protect
Range("B14:B27") = 1
Range("H14:H27") = "4%"
Range("E4:I4").Select
ActiveWindow.SmallScroll Down:=6
End Sub

Gracias Elsa , pero no te endiendo cuando dices con macro seria :ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True

donde tengo que poner esas opciones en la hoja factura en las opciones en visual basic , o en el libro .

Tengo excel 2013 pro .

Un saludo

En las líneas que marqué con --------------------------:

En la primera, donde dice: ---------------desproteger va esta:

ActiveSheet. Unprotect "tu_clave" 'si no tenés clave no va

En la segunda, donde dice: ------------------volver a proteger va esta:

ActiveSheet.Protect "tu_clave", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True

Sdos!

Me parece que he trabajado más que el otro experto y de modo más preciso. Si has valorado su respuesta espero que también lo hagas del mismo modo con la mía.

Sdos.

Elsa

Hola Elsa, por supuesto que si has trabajado más que el otro experto y te lo agradezco mucho elsa, lo que ocurre es que no estoy en casa ahora y no puedo probar el funcionamiento de tu código que es el que voy a usar, mañana lo pruebo y no dudes de que mi valoración sera positiva. Gracias de nuevo

Elsa

Hola Elsa , estoy probando el codigo y no me termina de funcionar donde pones ----------lo borro y pongo : ActiveSheet.Unprotect , sin contraseña y abajo donde pone volver a proteger vuelvo a poner: ActiveSheet.Protect "tu_clave", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True

Y me voy a la hoja y le doy a desproteger y no le he puesto contraseña y aun así me la pide para desproteger le doy a enter y dice que esta protegida.

Además quiero proteger la celda G36 y G37.

Gracias otra vez .

Un saludo

Seguramente en alguna de tus pruebas colocaste "tu_clave" y así quedó protegida... intentá desprotegerla manualmente con el texto: tu_clave

Sdos!

Si no lo resolves enviame tu libro así puedo observar cómo te está quedando la macro. Quizás mezclaste instrucciones de las 2 respuestas recibidas.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas