Ayuda para mejorar la conexión entre dos documentos creados con el programa Microsoft Excel

Hola Valedor, soy nuevo en esto del VBA y necesito tu ayuda...
Tengo un libro de excel "libro1" que una vez introducidos los datos, me crea otro libro "libro2" con una copia de una hoja del libro1. Lo que quiero es poder borrar el libro1 desde una macro lanzada desde libro1. ¿Se puede hacer?...
... Resulta que el libro1 ya esta abierto y la macro desde la que lo quiero borrar esta en libro1, y si cierro el libro1 ya no sigue ejecutando el código...
¿Me he explicado?... Es que es un poco difícil explicarlo.
Espero tu respuesta y muchas gracias de antemano.

1 respuesta

Respuesta
1
Para poder borrar un archivo, este no debe de estar abierto, entonces como la macro esta en Libro1 y este esta abierto, no es posible borrarlo desde el mismo, tienes que usar otro libro para cerrarlo y después borrarlo con Kill
Ya, pero llamo desde libro1 a otra macro en libro2 que cierra libro1 (para después borrarlo), pero entonces cuando se ha cerrado libro1, el código se detiene. ¿Cómo puedo evitar que se detenga el código de esta macro llamada desde libro1?
... gracias
No, si cierras un libro con código, TODO el código que tenga ese libro ya no se ejecutara, es decir, no puedes evitar al cerrar, detener el código, puedes evitar cerrar el libro, pero esto no es lo que quieres, haber si no entendemos
Original(Libro1) - Contiene macro que crea otro libro con una hoja del Original(Libro1)
**en este libro puede haber un codigo para cerrarse a si mismo, pero NO puede haber para borrarse a si mismo**
Nuevo(Libro2) - este libro contiene una hoja del libro Original(Libro2) creado por código. **aqui es posible tener una macro que cierre el libro Original(Libro1) y lo borre**
Para tener una macro en este Libro2, creado por código, también hay que crear la macro por código o en su defecto usar un tercer libro...
¿Así esta bien planteado el problema?...
Desde libro1 llamo a una macro en libro2. Esta macro cierra libro1 para después borrar libro1... (pero al cerrar libro1 se detiene el código que se esta ejecutando en la macro de libro2)
Entonces usando un tercer libro ¿no pasaría igual? ¿No se detendrá el código al cerrar libro1 si ha sido llamado directa o indirectamente desde libro1?
¿Se podría hacer de alguna manera?
... A ver si se te ocurre algo... y muchas gracias por las molestias que pudiera ocasionarte con mis preguntas.
No son molestias...
Solución uno: ver tu código y analizar donde esta el error
Solución dos: hacerlo a mi criterio
Tu decides...
Hazlo como creas que sea más conveniente.
¿Es mucho trabajo?... ¡Pues perdona!
Mil gracias.
Yo lo haría así, esta macro la tienes que ejecutar desde un tercer archivo o desde tu libro de macros personal, de esta manera siempre estará disponible...
Te sugiero primero hacer la prueba que te exongo y después probar sobre tus archivos, como hay una operación de borrado, puedes perder datos, pero esa es tu responsabilidad, debes de tener un libro guardado y que este sea tu libro activo cuando arranques la macro, después copiara una hoja que se llame Hoja1 (OJO, si no existe te dará un error) a un nuevo libro, cerrara el libro origen y confirmara el borrado, la macro esta documentada pero cualquier duda me preguntas...
Option Explicit
Public Sub CopiarHoja()
Dim wbOrigen As Workbook
Dim wbDestino As Workbook
Dim strRuta As String
Dim Res As Integer
'Guardamos el libro origen que debe ser el activo
Set wbOrigen = ActiveWorkbook
'Guardamos la ruta completa de este libro
strRuta = wbOrigen.FullName
'Copiamos la hoja1 (hay que usar el nombre correcto de
'tu hoja, sino, te dará un error), en un nuevo libro
Sheets("Hoja1").Copy
'Como queda activo lo guardamos en otra variable
Set wbDestino = ActiveWorkbook
'Cerramos el libro origen
wbOrigen.Close False
'Confirmamos el borrado del archivo
Res = MsgBox("Confirmar borrado de archivo", vbYesNo + vbQuestion)
If Res = vbYes Then
'Si responde que si BORRAMOS el archivo
Kill strRuta
'Guardamos el nuevo libro con el MISMO nombre del anterior
wbDestino.SaveAs strRuta
End If
'Liberamos la memoria usada
Set wbDestino = Nothing
Set wbOrigen = Nothing
End Sub
Muchísimas gracias...
Aún no lo he probado, pero seguro que funciona perfectamente.
De verdad que te agradezco mucho tu esfuerzo y admiro a las personas como tú que ayudan a los demás de forma totalmente altruista... de verdad gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas