En ocasiones se nos olvidan las contraseñas. Esto es tan habitual que siempre viene bien tenerlas apuntadas en algún sitio pero no siempre lo hacemos :(). En estos casos cunde el pánico, pensamos que ya no podremos usar nuestra hoja de Excel o modificarla pero siempre hay maneras de evitar los problemas…
No es que Excel sea una gran herramienta en cuanto a la seguridad, es verdad que no lo es. Pero es verdad que existen otras maneras de cifrar la información (winzip por ejemplo) mucho más seguras. En otro artículo ya hemos visto como proteger una libro de Excel y te recomiendo que le eches un vistazo para entender bien de qué estamos hablando.
En este post os vamos a explicar como desproteger todas las hojas protegidas de un libro de Excel.
Desproteger hoja de Excel
Para desproteger una hoja de de Excel necesitaremos un poco de paciencia (para copiar el código y pegarlo en la ventana de VBA) y para ejecutar la macro. Puede tardar unos 20 segundos así que la paciencia no es tanta.
El código que os presentamos no averigua la contraseña de la hoja en cuestión (o de las hojas) sino que es mucho más sencillo y mucho más complejo… todas las hojas, al ponerlas con contraseña, tienen un código de 12 dígitos formado por una cadena de A y B de 11 caracteres más un caracter adicional al final.
Nuestra macro irá recorriendo todas las posibilidades de contraseña (que parecen muchas pero no son tantas) hasta que encuentre una que resuelva el problema.
Esta macro está pensada para recorrer todas las hojas del libro y que pueda, de un solo golpe, hacer visibles y desproteger todas las hojas.
La macro en cuestión es la siguiente:
Sub Desproteger_hojas() Dim i As Integer, j As Integer, k As Integer, sht 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 For sht = 1 To Sheets.Count Sheets(sht).Visible = True Sheets(sht).Activate 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 GoTo siguiente End If Next: Next: Next: Next: Next: Next Next: Next: Next: Next: Next: Next siguiente: Next End Sub
Hay un gran número de bucles FOR anidados en esta macro pero no hay que asustarse, todos menos el primero se dedican a la búsqueda de la contraseña y el primero se dedica a recorrer todas las hojas del libro una a una, hacerlas visibles y activarlas.
Cómo usar este código
Para usar este código puedes visitar el post de cómo crear una macro en VBA. Es muy sencillo y se tarda muy poquito tiempo.