> Tengo un libro Excel con un proyecto VBA (protegido con contrasena) ...
> Si el libro no cumple una serie de condiciones, se elimina (Kill ThisWorkbook.FullName) ...
> Por que una vez eliminado, me pide la contrasena del Proyecto VBA?
> Que debo hacer para evitar esto?
- comenta el(los) procedimiento/s para ejecutar la instruccion "kill" (COMPLETO/S, "plis")
- comprueba que antes de estos procedimientos NO haga consultas (queries) hacia "el mismo libro"
- comenta cualquier otro detalle que tu conozcas y no se pueda desprender/adivinar/... de tu consulta (?)
saludos,
hector.
En el Módulo ThisWorkbook:
Private Sub Workbook_Open()
If Date > #12/31/2009# Then AnularAcceso
End Sub
En un módulo General:
Sub AnularAcceso()
Application.DisplayAlerts = False
Windows(ThisWorkbook.Windows(1).Caption).Visible = False
AnularAccesoForm.Show
ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close SaveChanges:=False
End Sub
En el código del UserForm:
Private Sub UserForm_Activate()
Application.Wait Now + TimeValue("00:00:05")
AnularAccesoForm.Hide
End Sub
Eso es todo, GRACIAS a tod@s por vuestra ayuda e interes,
Albymar
lo mas importante es que estos procedimientos "heredan" al VBE un proyecto "fantasma" (es decir):
aun despues de "matado" (y cerrado) el libro con el "kill", en el VBE sigue estando "presente"
y la causa es el haber mostrado un formulario (componentes ActiveX) previo a la auto-destruccion del archivo
esto sucede a partir de la version 2003 y supongo despues de las mas recientes actualizaciones instaladas
(supongo que dentro de las mejoras en seguridad, la "reaccion" es diferente ante distintos objetos, metodos, etc.)
considera que mientras el codigo esta corriendo (durante la presentacion del formulario)
=> el usuario tiene la opcion de pulsar {ctrl}+{pausa/break/interrupcion} Y DETENER la ejecucion de tu codigo
(con lo cual, la auto-destruccion del archivo jamas llegara a ejecutarse) (???)
la pregunta seria: que tan importante o necesario es mostrar ese formulario (?)
si NO lo muestras, desaparecerian (todos ?) tus "problemas" :D
saludos,
hector.
__ OP __
> - uso WindowsXP y Excel 2007 (tambien Excel 2003) y el codigo es:
>
> En el Modulo ThisWorkbook:
> Private Sub Workbook_Open()
> If Date > #12/31/2009# Then AnularAcceso
> End Sub
>
> En un modulo General:
> Sub AnularAcceso()
> Application.DisplayAlerts = False
> Windows(ThisWorkbook.Windows(1).Caption).Visible = False
> AnularAccesoForm.Show
> ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
> Kill ThisWorkbook.FullName
> ThisWorkbook.Close SaveChanges:=False
> End Sub
>
> En el codigo del UserForm: