una tabla seleccionadas sean sea que proteger para modificadas modificada macro las grupo desbloquear como columnas celdas celda bloquear archivo excel vba excel-vba

tabla - Proteger celdas en Excel pero permitir que estas sean modificadas por el script VBA



como proteger un grupo de celdas en excel (6)

Estoy usando Excel donde ciertos campos están permitidos para la entrada del usuario y otras células deben ser protegidas. He utilizado la hoja Herramientas Protegidas, sin embargo, después de hacer esto, no puedo cambiar los valores en el script VBA. Necesito restringir la hoja para detener la entrada del usuario, al mismo tiempo permitir que el código VBA cambie los valores de la celda en función de ciertos cálculos.


Como solución alternativa, puede crear una hoja de cálculo oculta , que contendrá el valor modificado. La celda de la hoja de cálculo protegida visible debe mostrar el valor de la hoja de trabajo oculta con una fórmula simple.

Podrá cambiar el valor mostrado a través de la hoja de trabajo oculta , mientras que sus usuarios no podrán editarlo.


Intenta usar

Worksheet.Protect "Password", UserInterfaceOnly := True

Si el parámetro UserInterfaceOnly se establece en verdadero, el código de VBA puede modificar las celdas protegidas.


Puedes modificar una hoja a través del código tomando estas acciones

  • Desproteger
  • Modificar
  • Proteger

En código esto sería:

Sub UnProtect_Modify_Protect() ThisWorkbook.Worksheets("Sheet1").Unprotect Password:="Password" ''Unprotect ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed" ''Modify ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password" ''Protect End Sub

La debilidad de este método es que si el código se interrumpe y el manejo de errores no lo captura, la hoja de trabajo podría dejarse en un estado desprotegido.

El código podría mejorarse tomando estas acciones

  • Re-proteger
  • Modificar

El código para hacer esto sería:

Sub Re-Protect_Modify() ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _ UserInterfaceOnly:=True ''Protect, even if already protected ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed" ''Modify End Sub

Este código renueva la protección en la hoja de trabajo, pero con el ''UserInterfaceOnly'' establecido en verdadero. Esto permite que el código de VBA modifique la hoja de trabajo, manteniendo la hoja de trabajo protegida de la entrada del usuario a través de la interfaz de usuario, incluso si la ejecución se interrumpe.

Esta configuración se pierde cuando el libro de trabajo se cierra y se vuelve a abrir. La protección de la hoja de cálculo todavía se mantiene.

Por lo tanto, el código de ''Reprotección'' debe incluirse al comienzo de cualquier procedimiento que intente modificar la hoja de trabajo o solo puede ejecutarse una vez cuando se abre el libro de trabajo.


Seleccioné las celdas que quería bloquear en la hoja 1 y coloqué el código sugerido en la función open_workbook () y funcionó como un amuleto.

ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _ UserInterfaceOnly:=True


Una respuesta básica pero fácil de entender:

Sub Example() ActiveSheet.Unprotect Program logic... ActiveSheet.Protect End Sub


No creo que pueda configurar ninguna parte de la hoja para que sea editable solo por VBA , pero puede hacer algo que tenga básicamente el mismo efecto: puede desproteger la hoja de trabajo en VBA antes de que necesite realizar cambios:

wksht.Unprotect()

y vuelva a protegerlo cuando haya terminado:

wksht.Protect()

Editar: parece que esta solución puede haber resuelto el problema inmediato de Dheer, pero para cualquiera que se encuentre con esta pregunta / respuesta más tarde, me equivoqué con la primera parte de mi respuesta, como Joe señala a continuación. Puede proteger una hoja para que sea editable solo mediante VBA, pero parece que la opción "UserInterfaceOnly" solo se puede establecer cuando se llama a "Worksheet.Protect" en el código.