10 de marzo de 2008

Desproteger hojas y libros de Excel

Con esta simple macro es posible desproteger hojas y/o libros de Excel, mediante la llamada al procedimiento correspondiente.-
Al utilizar el siguiente código es de importancia considerar que la ejecución del mismo demandará gran cantidad de los recursos del sistema, y el tiempo del proceso dependerá de la complejidad de la contraseña asignada a la hoja y/o libro.-

Código válido para Excel 2000, 2003 y 2007 (es posible que funcione en otras versiones).-


Código VB:

Sub DesprotegerHoja()
If MsgBox("Realmente desea desproteger la hoja actual?", vbCritical + vbYesNo + vbDefaultButton2, "DesprotegerHoja") = vbYes Then
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n 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 "La clave es: " & Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
MsgBox "La hoja está ahora desprotegida", vbInformation + vbOKOnly, "DesprotegerHoja"
Exit Sub
End If
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
End If
End Sub

Sub DesprotegerLibro()
If MsgBox("Realmente desea desproteger el libro actual?", vbCritical + vbYesNo + vbDefaultButton2, "DesprotegerLibro") = vbYes Then
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n 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

ActiveWorkbook.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 ActiveWorkbook.ProtectStructure = False And ActiveWorkbook.ProtectWindows = False Then
'MsgBox "La clave es: " & Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
MsgBox "El libro está ahora desprotegido", vbInformation + vbOKOnly, "DesprotegerLibro"
Exit Sub
End If
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
End If
End Sub

3 comentarios:

Roberto dijo...

Super bueno el codigo.
Un millón de gracias.
Sólo necesité la parte para desproteger libro y funcionó muy bien, después de estar horas buscando por lo menos hay algo que realmente funciona.
Lo dicho, muchísimas gracias.
Salu2,
Roberto

Anónimo dijo...

Me sorprendió!!!!

Realmente increíble, sin duda el invento más grande después de la penicilina. JAJAJAJA

Saludos.

Anónimo dijo...

Estupendo
Me ha ayudado muchísimo

Saludos