2012-08-16 21 views
8

Recientemente comencé a escribir algunas macros en Excel. Tengo una hoja de trabajo protegida, y algunos botones que permiten al usuario agregar/eliminar columnas/filas en un cierto punto de la hoja de cálculo.Desproteger hoja con contraseña, sin exponer la contraseña en la macro

Actualmente desprotejo la hoja de trabajo, realizo las funciones y luego protejo la hoja de trabajo.

El problema es que la contraseña de la hoja protegida está en texto sin formato en la macro para que cualquier ojo curioso la vea.

¿Cómo puedo tener una contraseña en la hoja para protegerla, pero al mismo tiempo, permitir que Macro desproteja la hoja de cálculo mientras realiza sus funciones y luego volver a protegerla, sin escribir la contraseña de texto plano en la macro?

Respuesta

13

dos opciones:

  1. proteger con contraseña el VBA. (Aunque la protección de VBA está lejos de ser segura contra intentos maliciosos, no es peor que la seguridad de la protección de hojas)
  2. Si configura la protección de la hoja de cálculo con VBA, puede especificar UserInterfaceOnly:=True.

    sh.Protect Password:="Password", UserInterfaceOnly:=True

    Una vez determinado de esta forma el código VBA puede modificar la hoja sin proporcionar una contraseña. Dado que la contraseña se debe proporcionar una vez para aplicar protección en primer lugar, ejecute este código desde un libro de trabajo separado o agregue el suyo.

+3

+ 1 Yo también evito contraseñas de texto. No es que haga una gran diferencia. Uno puede usar algún generador de contraseñas único. Aquí hay un ejemplo muy básico 'ActiveSheet.Protect Application.WorksheetFunction.Pi' Y a veces uso un generador de contraseñas al azar que solo el código vba puede desproteger. –

+0

+1, no me di cuenta de que el # 2 era una opción; lo usaré yo mismo. – enderland

1

Encontré un código hace un tiempo que puede ser de alguna ayuda. Esto desbloqueará cualquier hoja de trabajo protegida con contraseña. Toma un poco de tiempo dependiendo de la longitud de la contraseña, pero esencialmente solo se abre paso a martillazos y desbloquea la hoja de trabajo. Puede que no sea la respuesta más eficiente a su pregunta, pero es un código útil para tener, no obstante.

Sub PasswordBreaker() 
    'Breaks worksheet password protection. 
    Dim i As Integer, j As Integer, k As Integer 
    Dim l As Integer, m As Integer, n As Integer 
    Dim i1 As Integer, i2 As Integer, i3 As Integer 
    Dim i4 As Integer, i5 As Integer, i6 As Integer 
    On Error Resume Next 
    For i = 65 To 66: For j = 65 To 66: For k = 65 To 66 
    For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66 
    For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 
    For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126 
    ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _ 
     Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _ 
     Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) 
    If ActiveSheet.ProtectContents = False Then 
     MsgBox "One usable password is " & Chr(i) & Chr(j) & _ 
      Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _ 
      Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) 
     Exit Sub 
    End If 
    Next: Next: Next: Next: Next: Next 
    Next: Next: Next: Next: Next: Next 
End Sub 
+4

No es relevante para la pregunta. – brettdj

0

Puede llamar a un UserForm para manejar la solicitud de contraseña, pero enmascarar los caracteres utilizando PasswordChar como una propiedad de texto.

enter image description here

Cuestiones relacionadas