Workbook_Open () no funciona con Workbook Protection

Oct 19 2020

Estoy usando Excel 2016 y tengo este código escrito en el objeto ThisWorkbook en VBA:

Private Sub Workbook_Open()
ThisWorkbook.Protect (password = "password")
End Sub

No está trabajando. El punto aquí es que esto debería evitar que los usuarios toquen las funciones de Power Query en este libro de trabajo. Lo guardé como un libro de trabajo habilitado para macros, tengo todas las macros y eventos habilitados y este es el único libro de trabajo abierto.

También tengo este código adicional:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Protect (password = "password")
ThisWorkbook.Save
End Sub

Y eso tampoco está funcionando. Funciona bien si inserto ese código "ThisWorkbook.Protect" en un módulo general u objeto de hoja de trabajo y lo ejecuto manualmente, pero cuando quiero que este archivo de Excel en particular ejecute este código automáticamente al abrir o cerrar, no lo hace.

¿Alguna idea de que puede estar causando esto?

Respuestas

garbb Oct 19 2020 at 13:11

Por alguna razón, la ejecución ThisWorkbook.Protecten un libro de trabajo protegido parece desprotegerlo (aunque no pude encontrar ninguna documentación que diga que hace esto), así que intente esto:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not ThisWorkbook.ProtectStructure Then ThisWorkbook.Protect Password:="password"
    ThisWorkbook.Save
End Sub