¿Cómo conservar hoja protegida después de ejecutar una macro?

Tengo una macro que ejecuto en un libro compartido la cual corre sin problemas, abre libro como uso exclusivo realiza, realiza todas las operaciones vuelve a compartir, proteger y cerrar el libro. El tema es que cada vez que ejecuta la macro si me voy manualmente a desactivar compartir libro y luego doy clic a desproteger hoja lo hace sin pedirme contraseña siendo que hasta antes de ejecutar la macro si la pedía, necesito me ayudes como podría solucionar esto ya que necesito compartir el libro con otros usuarios vía red pero solo yo poder desprotegerlo, estoy usando excel 2010.

1 respuesta

Respuesta
2

Para proteger y desproteger la hoja o el libro debes hacerlo de la siguiente forma:

Debes tener en cuenta que cuando vayas a utilizar la hoja o el libro por un procedimiento o función de un macro primero desactivas la seguridad y cuando finalices vuelves a activarla.

Primero debes poner en un modulo el siguiente código:

Sub Auto_open()

ActiveSheet.Protect "contraseña"
End Sub

y en el botón o procedimiento agregas:

Private Sub CommandButton4_Click()

ActiveSheet. Unprotect "contraseña"

... instrucciones ...

ActiveShSubeet. Protect "contraseña"

End Sub

como podría plasmarlo, si para llamar la macro lo hago a través de un userform y en el modulo tengo el siguiente código.

Sub Entrada()
Load UserForm1
UserForm1.Show
End Sub

intente agregar tal cual el código que propones dentro del mismo modulo 1 pero el userform ya no se ejecuta correctamente por que se trata de un libro compartido, dentro de la macro si inicio des protegiendo y finalizo protegiendo la hoja, el problema es que al finalizar la macro si me voy con el mouse y dejo de compartir el libro y luego desproteger ya no me pide contraseña, siendo que hasta antes de ejecutarla si lo hacia

Puede ser que algún procedimiento que ejecutas en la interacción del UserForm1 puede estar desactivando la seguridad. Has lo siguiente:

Primero debes manualmente bloquear la hoja con la contraseña que vas a utilizar, solo lo haces por primera vez y guardas el libro.

Después debes tener en cuenta que cuando utilices la hoja por medio del UserForm1 para ingresar valores, modificar entre otros a la hoja por medio de botones textbox o combobox todo esto debe iniciar con ActiveSheet. Unprotect "tucontraseña" y finalizar con ActiveSheet. Protect "tucontraseña" para que asi mantenga la hoja tal cual protegida.

Ademas si quieres que al cerrar o finalizar el UserForm1 confirmes protegiendo la hoja con tu contraseña pones lo siguiente en el código del UserForm1:

Private Sub UserForm_Terminate()
ActiveSheet.Protect "tucontraseña"
End Sub

Si esto no te funciona, puedes adjuntar el archivo para analizarlo.

Mi código hace lo que mencionas desprotege la hoja al inicio  vuelve a proteger al final de ejecutar la macro, pienso que me serviría proteger al finalizar el userform pero la pregunta es:

¿como podría proteger la hoja al finalizar el userform? si ya tengo este código.

Private Sub UserForm_QueryClose(cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox "Use el botón SALIR del formulario", vbInformation, " Botón No Disponible "
cancel = 1
CloseMode = 1
End If
End Sub

para cerrar el userform uso un botón.

?

Private Sub CommandButton10_Click()
Unload Registro

End Sub

como puedo insertar el código que propones

Private Sub UserForm_Terminate()
ActiveSheet.Protect "tucontraseña"
End Sub

o dime como te puedo adjuntar el archivo?

Puedes agregar la sentencia al momento de cerrar el userform con el botón, de esta manera:

Private Sub CommandButton10_Click()

ActiveSheet. Protect "tucontraseña"

Unload Registro
End Sub

Recuerda que ActiveSheet protege la hoja activa del libro donde estés, por si cambias de libros cuando ejecutes el userform.?

De todas formas si quieres puedes mandarme el archivo al correo [email protected] y lo reviso, no te olvides decirme también en que office lo estas haciendo, cuando me lo envíes.

Al cambiar la programación de los combobox y textbox así como el auto open me funciono correctamente. Resolviste satisfactoriamente mi problema.

muchas gracias!

La pregunta no admite más respuestas

Más respuestas relacionadas