Variable a contraseña Vb Excel para proteger y desproteger hojas

Tengo un libro que realiza varias rutinas de copiado de datos a otras hojas con macros, para evitar inconvenientes de borrado de datos las hojas están protegidas por ello cada vez que se ejecuta una instrucción se hace con la siguiente linea:

Sheets("Hoja1").Select
ActiveSheet. Unprotect "Micontraseña"

La pregunta es cómo puedo hacer para que ese dato se pueda nombrar como una variable, es decir que le asigne un nombre que lleve dicha contraseña y que cuando desee cambiarla, ¿solamente le de el dato a la variable?

1 Respuesta

Respuesta
1

Para realizar ese procedimiento la clave para desproteger la hoja debe estar anclada a una celda de una hoja del libro, esa hoja podría asignarle la propiedad xlVeryHidden para que no sea visible ni pueda mostrarse. Siga estos pasos:

1- Inserte una nueva hoja en el libro colóquele el nombre "CLAVE" a la hoja, en la celda "A1" digite la clave, por ejemplo "Micontraseña"

2- Vaya al editor de Vb en el modulo "Thisworkbook" pegue el siguiente código:

Private Sub Workbook_Open()
Sheets("CLAVE").Visible = xlVeryHidden
End Sub

De esta manera siempre estará oculta esta hoja. (Para mostrarla colóquele la propiedad xlSheetVisible)

3- En el editor de Vb, Inserte un formulario, el nombre es "UserForm1" con tres textbox como se muestra en la imagen: (este formulario le permitirá cambiar la clave de protección de las hojas cada vez que lo desee, sin abrir el Editor de Vb)

y asígneles nombre a los textbox y a los botones:

 TXT_CLAVEANTIGUA 'contraseña anterior (la que está en "A1" en la hoja "CLAVE"
 TXT_CLAVENUEVA1 'Nueva contraseña
 TXT_CLAVENUEVA2 'Repita la contraseña

 BTN_CAMBIAR 'Botón CAMBIAR

 BTN_CANCELAR ' Botón CANCELAR

4- Inserte un botón ActiveX en la hoja donde ejecuta sus códigos, en la pestaña programador, menú Insertar, controles ActiveX, elija botón de comando, clic derecho en el botón, propiedades y colóquele el nombre al botón: "BTN_CAMBIARCLAVE"

5-En el editor de Vb dele clic derecho encima del formulario seleccione "ver código" y pegue el siguiente código:

Dim ANTIGUA As String
Dim NUEVA1 As String
Dim NUEVA2 As String

Private Sub BTN_CAMBIAR_Click()
ANTIGUA = TXT_CLAVEANTIGUA.Value
NUEVA1 = TXT_CLAVENUEVA1
NUEVA2 = TXT_CLAVENUEVA2
If ANTIGUA = Sheets("CLAVE").Range("A1").Value And (NUEVA1 = NUEVA2) Then
        Sheets("CLAVE").Range("A1").Value = NUEVA2
Else
    MsgBox ("Los datos no coinciden, por favor revise y vuelva a intentarlo"), vbCritical
End If
UserForm1.Hide
Unload UserForm1
End Sub

Private Sub BTN_CANCELAR_Click()
UserForm1.Hide
End Sub

6- En el editor de Vb en el modulo donde tiene su código pegue el siguiente código:

Public CLAVE As String

Private Sub PROTEGER()
CLAVE = Sheets("CLAVE").Range("A1").Value
Sheets("hoja1").Protect CLAVE
End Sub

Private Sub DESPROTEGER()
CLAVE = Sheets("CLAVE").Range("A1").Value
Sheets("hoja1").Unprotect CLAVE
End Sub

Private Sub BTN_CAMBIARCLAVE_Click()
UserForm1.Show
End Sub

Sub MOSTRAR()
ThisWorkbook.Sheets("CLAVE").Visible = xlSheetVisible
End Sub

De esta manera cada vez que necesite desproteger la hoja solo debe llamar el procedimiento; es decir en vez de colocar:

Sheets("Hoja1").Select
ActiveSheet. Unprotect "Micontraseña" 

cambie esas líneas por:

Call DESPROTEGER

Y cuando nesecite proteger la hoja:

Call PROTEGER

Muy buena solución, y realmente queda oculto del código de Visual Basic, le agradezco mucho su tiempo y colaboración, que Dios lo bendiga.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas