Llevaba un par de días buscando información para poder desbloquear un .xlsm que realicé hace ya un tiempo.
Lo de conocer la contraseña de desprotección de la hoja y el libro es trivial eso está más que explicado en cientos de sitios (como [1], [2] o [3]) y con una breve búsqueda lo encontramos, es tan sencillo como insertar una macro, pero ¿Y si no tenemos acceso al código VBA?
Mi problema era desproteger la contraseña que se introduce en el proyecto VBA, no podía ni acceder ni ver el código del archivo, había encontrado varios sitios en que lo explicaban (como [1], [2] o [3]) pero parecía no funcionar y algo tenía que ver que intentaba abrir un archivo .xlsm generado y protegido con Excel 2003 en un Excel 2010.
La solución
- Haz una copia de seguridad del archivo a desproteger (por si algo va mal)
- Abre el archivo .xlsm que quieres desproteger desde Excel (en mi caso versión 2010)
- PASO IMPORTANTE: Guardar como… un archivo .xls (esto es importante, seguramente nos de advertencias de pérdidas de compatibilidad, pero le daremos a continuar)
- Una vez guardado el .xls cierra el Excel
- Abre el archivo .xls desde un editor hexadecimal (yo he usado el HexEdit)
- Busca la palabra DPB
- Cambia DPB por DPx (esto provocará un fallo por el que no reconocerá la clave y provocará que esta quede inutilizada)
- Guarda el archivo y cierra el editor hexadecimal.
- Abre el archivo .xls normalmente.
- Abre el código VBA (ALT+F11) y te saltará una advertencia de que la clave DPx no es válida, simplemente sigue para adelante, pero aún no podrás ver el código te saltará una advertencia de «Error no esperado»
- PASO IMPORTANTE: Para solucionarlo simplemente lo volvemos a Guardar Como… un .xlsm
- Volvemos al editor VBA (ALT+F11) y listo, ya podemos verlo!! (la línea de código roja indica un problema en la compatibilidad entre versiones de 32bits y 64 bits pero eso es otro tema)
En mi caso la clave estaba en la conversión de .xlsm a .xls y viceversa. al abrir un archivo desde diferentes versiones. Si todo es desde la misma versión no debería ser necesario hacer esto.
Amigo que gran aporte todo ok para modificar la vba de la macro
Me fue de muy buena ayuda, muchas gracias, un buen aporte. Gracias