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

1 comentario:

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