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
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.
- Compartir 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
- Compartir respuesta
Marc, entiendo que quieras dejar tu publicidad, pero trata de hacerlo en tus propias respuestas. Aquí la respuesta ya está completa y tu le estas sugiriendo el uso de otras subrutinas ... creo que más que ayudar estás confundiendo. - Elsa Matilde