Autodestruir un libro

08/03/2007 - 20:06 por Ivan | Informe spam
hola a todos,

estoy intentando que un libro ya creado, se autodestruya tras haber
realizado su 'cometido'. A lo mejor es muy sencillo, o a lo mejor no
se puede, pero la cosa es que no consigo verlo. Tras buscar algo
parecido al Delete de las hojas, etc,.., al final mis ultimos intentos
van por la via de crear un 2º libro, insertarle codigo, e intentar que
sea este el que realice el cometido una vez cerrado el primero. Pero,
o algo estoy haciendo mal o es que, al menos con este planteamiento no
se puede.

el codigo que pongo a continuacion es una de las ultimas combinaciones
que he probado, pero, a pesar de cerrar el primer libro y 'no guardar'
el 2º, el 1º no me lo elimina de su directorio (tambien me interesa
que no lo mande a la papelera de reciclaje, sino que lo elimine del
todo)3

bueno, no se si me he explicado, pero ahi va el codigo:

Sub Autodestruir()
Dim EsteLibro As String
With ThisWorkbook
EsteLibro = .Path & "\" & .Name
.Save: .Close
End With
Workbooks.Add
With
ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.InsertLines 2, "Private Sub Workbook_BeforeClose(Cancel As
Boolean)"
.InsertLines 3, " Kill " & """" & EsteLibro & """"
.InsertLines 4, " ThisWorkbook.Saved = True"
.InsertLines 5, "End Sub"
.InsertLines 6, "Private Sub Workbook_Activate()"
.InsertLines 7, " ThisWorkbook.Close"
.InsertLines 8, "End Sub"
End With
End Sub

he probado muchas combinaciones, pej. cerrar el libro tambien desde el
2º libro:->

.InsertLines 6, " Workbooks(" & """" & EsteLibro & """" & ").Close"

pero tampoco he conseguido eliminarlo. ¿quizas es que al llamar a otro
libro desde uno, este ultimo no se cierra realmente hasta que todo el
codigo llamante se ha ejecutado?

se me esta ocurriendo que quizas insertando un OnTime en el 2º libro,
para dar tiempo a que realmente se cierre el 1º. Voy a probarlo, pero
no lo veo nada claro.

en cualquier caso, si a alguien se le ocurre algo se lo agradezco

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#6 Ivan
09/03/2007 - 03:34 | Informe spam
hola zz, muchas gracias de nuevo

aunque no lo he probado todavía (he de reconocer que me he liado con la
respuesta de HM que parece solucionar el tema sin problemas), ten por seguro
que lo probare. Aunque me temo (y lo mismo estoy totalmente equivocado) que
por mis experiencias con Wait, esta paralice también el proceso de cierre
del libro durante el tiempo especificado. Lo dicho, aunque solo sea por
intentar aprender un poco, la probare y si funciona te comento.

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#7 Héctor Miguel
09/03/2007 - 04:48 | Informe spam
hola, Ivan !

a) la copia que se abre tiene entonces el mismo nombre, ruta, etc, que el original aun sin haberlo guardado?
y, en caso de seguir normalmente, no eliminar el archivo, esta copia sobrescribe al original?
b) ... si usamos ChangeFileAccess pero le asignamos el mismo modo que el libro ya tiene
<pej. para tu codigo, que el libro ya estuviera en modo xlReadOnly> se produciria el mismo 'efecto'?
y por ultimo, y para seguir abusando, supongo que habrás leido mi respuesta a zz.
me podrias aclarar si es cierto lo que le comentaba sobre no dispararse los eventos al abrir/crear un libro con codigo
o es otra de mis idas de olla?



1) al cambiarle el 'modo de acceso' a un libro [entre xlReadOnly <-> xlReadWrite]
a) se cierra el libro 'en curso'... y se abre la version de la ultima grabacion conocida [pero] en el modo 'solicitado'
si hubiera habido modificaciones... excel te va a preguntar si estas seguro de querer 'revertir' el libro 'actual' a la version 'anterior'
b) si el libro 'actual' estuviera ya en modo xlReadOnly... ponerlo 'nuevamente' en xlReadOnly genera errores :-((
-> para los ultimos dos casos... se utiliza la instruccion Application.DisplayAlerts = False [para que no 'pregunte'] :))

[por ultimo]... en el caso del codigo que comentas con 'zz'... tu libro no hace lo que le indicas por lo siguiente:
a) las pirmeras lineas del codigo que utilizas son las siguientes:
Sub Autodestruir()
Dim EsteLibro As String
With ThisWorkbook
EsteLibro = .Path & "\" & .Name
.Save: .Close
End With [etc. etc. etc.]
b) las lineas que 'siguen' al cerrado del libro... [ .Save: .Close ] YA NO SE EJECUTAN por que ???...
[sencillamente] porque el libro ya se ha cerrado, y las lineas de codigo 'siguientes' ya no estan 'abiertas/disponibles/..' :-((

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#8 Ivan
09/03/2007 - 22:57 | Informe spam
hola Hector, y de nuevo mil gracias

en cuanto al 'close' del otro codigo, la verdad es que al principio lo
puse despues de cargar el codigo en el otro libro, pero al ejecutarlo
me daba 'error por subindice fuera del intervalo', por lo que supuse
que el libro ya se habia eliminado al llegar ahi y por eso me lo
daba.

Me acorde de que en los formularios (y a lo mejor tambien estoy
equivocado) si puedes ejecutar instrucciones aunque esten detras de un
'unload', o sea que el codigo continua aun despues de cerrarse el
formulario, y pense que quizas aqui pasaria lo mismo, pero supongo que
en ese caso el 'parent', con sus modulos, etc, sigue 'vivo', mientras
que en el caso del libro desaparece todo el entorno al cerrarse (o
algo asi).

bueno, te debo otra mas, muchas gracias

un saludo
Ivan
Respuesta Responder a este mensaje
#9 Malaquias
18/03/2007 - 12:27 | Informe spam
Siento la intromisión pero aprovechando el hilo, se puede autodestruir a
partir de una fecha ? (por ejemplo 01-04-07)


estoy intentando que un libro ya creado, se autodestruya tras haber
realizado su 'cometido'...



prueba copiando/pegando las siguientes instrucciones [p.e.]
en el evento que consideres aplicable... o como lineas siguientes al
'cometio cumplido'... o... ???
-> corre pruebas sobre copias, porque [probablemente] no volveras a ver el
archivo que se auto-elimine :D

[luego de otras lineas en algun procedimiento en algun modulo de codigo]
???

Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#10 Héctor Miguel
18/03/2007 - 19:49 | Informe spam
hola, Malaquias !

... aprovechando el hilo, se puede autodestruir a partir de una fecha ? (por ejemplo 01-04-07)



solo necesitas que al momento de abrirse el libro, exista alguna forma de 'comprobacion' de la fecha 'actual' ???
recuerda que se puede modificar la fecha 'del sistema' -p.e.- desde el panel de control de windows o la barra de tareas :-(
[por lo tanto] te sugiero algun procedimiento 'auxiliar' que vaya depositando fechas consecutivas [p.e. en alguna hoja oculta]
y que al momento de 'romperse' esta secuencia y/o alcanzar la fecha 'imite'... ejecute el procedimiento de auto-eliminacion ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ las consultas anteriores __
estoy intentando que un libro ya creado, se autodestruya tras haber realizado su 'cometido'...



prueba copiando/pegando las siguientes instrucciones [p.e.] en el evento que consideres aplicable...
o como lineas siguientes al 'cometio cumplido'... o... ???
-> corre pruebas sobre copias, porque [probablemente] no volveras a ver el archivo que se auto-elimine :D

[luego de otras lineas en algun procedimiento en algun modulo de codigo] ???

Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida