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

#1 zz
09/03/2007 - 01:20 | Informe spam
y creando un VBS con la instruccion kill(filename), en el evento beforeclose
del libro?


Zz[underground]

"Ivan" wrote in message
news:
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
Respuesta Responder a este mensaje
#2 Ivan
09/03/2007 - 01:45 | Informe spam
hola zz, lo primero gracias por la ayuda

y creando un VBS con la instruccion kill(filename), en el evento
beforeclose del libro?



me temo, por lo que creo entender y por lo inutil de mis intentos, que
'Kill' no se puede utilizar con un archivo abierto (y en beforeclose aun no
se ha cerrado, creo), te da un error denegando el permiso. Ese es el motivo
de intentar cerrar el libro e intentar eliminarlo desde el nuevo libro
creado, pero no consigo que 'rule'.

tras intentar con ontime sigo en las mismas, e incluso peor, pues a veces el
2º libro nio se cierra. Creo que el problema puede estar (segun me parece
entender en la ayuda) en que cuando abres(y supongo que cuando creas) un
libro con macros desde otro los eventos del abierto/creado no se disparan,
y, posiblemente haya que recurrir a RunAutoMacros, pero mis intentos por
esta via, al menos de momento, tambien estan siendo infructuosos.

bueno, voy a seguir mareandome un rato, y en cualquier caso muchas gracias
por el interes, y si se te/os ocurre algo mas sera bien recibido

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#3 zz
09/03/2007 - 02:07 | Informe spam
puedes poner una clausula wait() en el vbs que dure el tiempo que tarda en
cerrarse el libro


Zz[underground]

"Ivan" wrote in message
news:%
hola zz, lo primero gracias por la ayuda

y creando un VBS con la instruccion kill(filename), en el evento
beforeclose del libro?



me temo, por lo que creo entender y por lo inutil de mis intentos, que
'Kill' no se puede utilizar con un archivo abierto (y en beforeclose aun
no se ha cerrado, creo), te da un error denegando el permiso. Ese es el
motivo de intentar cerrar el libro e intentar eliminarlo desde el nuevo
libro creado, pero no consigo que 'rule'.

tras intentar con ontime sigo en las mismas, e incluso peor, pues a veces
el 2º libro nio se cierra. Creo que el problema puede estar (segun me
parece entender en la ayuda) en que cuando abres(y supongo que cuando
creas) un libro con macros desde otro los eventos del abierto/creado no se
disparan, y, posiblemente haya que recurrir a RunAutoMacros, pero mis
intentos por esta via, al menos de momento, tambien estan siendo
infructuosos.

bueno, voy a seguir mareandome un rato, y en cualquier caso muchas gracias
por el interes, y si se te/os ocurre algo mas sera bien recibido

un saludo y hasta pronto
Ivan

Respuesta Responder a este mensaje
#4 Héctor Miguel
09/03/2007 - 02:41 | Informe spam
hola, Ivan !

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
#5 Ivan
09/03/2007 - 03:24 | Informe spam
hola Hector Miguel, 'bueno, bonito y barato', no se puede pedir mas. Muchas
gracias de nuevo

suponía que tenia que haber alguna forma (relativamente) 'sencilla' de
hacerlo, pero no lo veía, y encima, con mi tendencia a complicarme la vida.

permíteme que te haga una consulta (o que te exponga como me parece que
funciona, por si estoy equivocado) sobre la solución. Echando un ojo a la
ayuda, creo entender que al cambiar el modo de acceso, el archivo 'original
se cierra (ya podemos aplicar Kill), creándose una copia, que con no
guardarla ya hemos resuelto el problema.

ahora, si no te importa, un par de dudas(sobre todo si lo anterior es mas o
menos cierto):

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)(Esta consulta es un poco tonta,...pero la curiosidad...) -> ¿si usamos
ChangeFileAccess pero le asignamos el mismo modo que el libro ya tiene <pej.
para tu código, que el libro ya estuviera en modo xlReadOnly> se produciría
el mismo 'efecto'?

y por ultimo, y para seguir abusando, supongo que habrás leído mi respuesta
a zz. ¿me podrías aclarar si es cierto lo que le comentaba sobre no
dispararse los eventos al abrir/crear un libro con código, o es otra de mis
idas de olla?

bueno, en cualquier caso muchas gracias

un saludo
y hasta pronto
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida