Macro para borrar libro excel activo

Tengo un excel(1) que contiene un botón, cuando haces click debe crearse un pdf y colocarlo en un directorio concreto (hasta aquí ningún problema) una vez realizada esta operación debe borrarse este Excel.

Yo había pensado lo siguiente: una vez realizado lo del pdf se abra otro excel(2) que contenga una macro que al abrirse borre el excel(1) pero que ocurre, para borrar el excel(1) he de cerrarlo y claro una vez cerrado se detiene todo. ¿Cómo puedo hacerlo?

3 respuestas

Respuesta
5

Desde luego un archivo no puedes borrarlo cuando lo tienes abierto y no es por culpa de excel, es el sistema operativo el que protege al archivo.

Pero podrías hacerlo al revés, es decir, si en un libro "x" tienes tu macro que haga lo siguiente:

1. Abrir el excel1

2. Con en el excel1 crear el PDF

3. Cerrar el excel1

4. Borrar el excel1

De esa forma tu excel "x" tendrá siempre la macro que crea un PDF de cualquier libro.

Puede ser algo así, pon la siguiente macro en un libro nuevo.

Sub arbir_pdf_cerrar()
'Por.DAM
    p = ThisWorkbook.Path & "\"
    archivo = Application.GetOpenFilename
    If archivo = False Then Exit Sub
    Workbooks.Open archivo
    n = ActiveWorkbook.Name
    n = Left(n, InStrRev(n, ".") - 1)
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=p & n & ".pdf", _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    ActiveWorkbook.Close
    Kill archivo
End Sub

Saludos.Dante Amor

No olvides valorar la respuesta.

Muchas gracias por la prontitud de respuesta, pero el problema es que tengo que partir siempre del excel(1).

Me imagino que la solución dependerá de la forma de llamar al excel(2).

La secuencia seria del estilo:

Desde excel(1) botón de llamada a excel(2)

Al abrir excel(2) se ejecuta macro:crear pdf del excel(1) / cerrar excel(1) / borrar excel(1) / cerrar excel(2)

Como te comenté anteriormente no puedes borrar un archivo que está abierto.

Lo que puedes hacer es:

1. Abrir excel(2)

2. Ejecutar macro en excel(2): crear pdf del excel(1)

3. Cerrar excel(1)

Cuando cierras el excel(1) automáticamente se detiene la macro, ya no podrías hacer los pasos borrar excel(1) y cerrar excel(2)

Por lo tanto no es problema de cómo se hace el llamado. Cuando inicias un proceso el control lo tiene el programa inicial, puedes hacer que otro programa se ejecute, como en este caso puedes hacer que se ejecute una macro en otro libro (utilizando en el otro libro el evento OPEN), pero el control lo sigue teniendo el programa inicial, entonces cuando cierras el libro que tiene el programa inicial, todo se detiene.

Lo que te recomiendo es, cuando hayas terminado de actualizar el excel(1) lo guardes y lo cierres, entonces abres el libro(2) con la macro que te envié y la ejecutes. De lo contrario tendrías que hacer todo desde otra aplicación, por ejemplo desde Visual Basic, es decir, desde Visual controlar abrir el excel(1), actualizarlo, cerrarlo y borrarlo, pero el programa inicial o principal sería Visual.

Lo que opinan es que realices la siguiente secuencia:

1. Abrir tu excel(1)

2. Actualizar tu excel(1)

3. Presionar un botón que abra tu excel(2), lo cual puedes hacer con este código:

Sub abrir()
'Por.DAM
    p = ThisWorkbook.Path
    n = ThisWorkbook.Name
    Workbooks.Open p & "\archivo2.xlsm"
    'Poner la ruta y el archivo en el archivo2
    ActiveWorkbook.Sheets(1).Range("A1") = p & "\"
    ActiveWorkbook.Sheets(1).Range("A2") = n
End Sub

4. Una vez que se abrió el excel(2), entonces presionar un botón en el excel(2) que va a realizar lo siguiente:

4.1 Activar el excel(1), los datos están en la celda A2

4.2 Generar PDF

4.3 Cerrar excel(1)

4.4 Borar excel(1) (los datos están en la celda A1 y A2)

Este sería el código del excel 2

Sub pdf_cerrar_borrar()
'Por.DAM
    p = Range("A1")
    n = Range("A2")
    Workbooks(n).Activate
    ActiveWorkbook.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=p & "archivo1.pdf", _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=False
    Application.DisplayAlerts = False
    Workbooks(n).Close
    Kill (p & n)
    Application.DisplayAlerts = True
End Sub

Lo dicho: "Un pregunta tiene tantas respuestas como personas lo intenten resolver" Por.DAM

Ya tienes el código para otra opción.

codigo de excel(1)

Sub abrir_excel2()
'donde se encuentra excel(2)
tot = "N:\Certificados Calibraciones-Verificaciones\01-Per validar\Fitxers\excel2.xlsm"
'nombre excel(2)
nom_llibre_calculs = "excel2.xlsm"
Application.ScreenUpdating = False
Dim FC2 As Excel.Workbook
Set FC2 = GetObject(tot)
ThisWorkbook.Application.Visible = True
FC2.Application.Visible = True
FC2.Application.Windows(nom_llibre_calculs).Visible = True
FC2.Close SaveChanges:=False
Set FC2 = Nothing
Application.ScreenUpdating = True
End Sub

He obiado lo de crear pdf

Código excel 2

Sub borrar()
Dim z As Long
Dim ruta As String
Dim LLOC As String
Dim CM As String
Dim NomArxiu As String
Windows(excel2.xlsm").Visible = True
ThisWorkbook.Activate
NomArxiu = Workbooks(1).Name
CM = Workbooks(1).Sheets("Hoja1").Range("R4")
If CM = "C" Then LLOC = "N:\C\"
If CM = "I" Then LLOC = "N:\I\"
ruta = LLOC & NomArxiu
ChDir LLOC
Workbooks(1).Close
' apartir de aqui el problema
Kill NomArxiu
ThisWorkbook.Close
End Sub

Pero no te estaba pidiendo a ti el código del excel(1) y excel(2), se lo pedí al experto que estaba proponiendo una solución. Pero no puso ningún código.

Yo te puse una nueva secuencia, y como te expliqué: No puedes borrar un archivo si está abierto. Por eso te envié 3 alternativas.

1. Que el excel(2) haga todo.

2. Otra aplicación, podría ser también visual, haga todo.

3. El excel(1) con un botón llama al excel(2), el excel(2) con un botón haga todo.

Respuesta

Acabo de leer la consulta y opino como Cornejo:

El Excel 1 tiene una macro solo para abrir el Excel2. Y el Excel 2 tiene el resto del código, así siempre estarías ejecutando el proceso a partir del Excel1.

Sdos

Elsa

http://aplicaexcel.galeon.com/macros.htm 

Respuesta
-1

Que el Excel(1), sólo se encargue de crear el pdf y abrir el Exel (2), enviándole el nombre del Excel(1) .

El Excel (2) tendrá el código para borrar Excel(1).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas