Sacar copia de un libro que contiene macros sin que en la copia se copien las macros

A ver si me podéis echar una mano, como se puede sacar una copia de un libro que contiene macros de forma que en la copia se copie la información pero que no se copien las macros

2 respuestas

Respuesta
1

Puedes guardar el archivo sin macro con esto:

Sub Macro3()
'Guarda archivo
        ThisWorkbook.SaveAs Filename:="respaldo.xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub

Pero el libro que contiene las macros se cerrará y quedará abierto el nuevo libro.

Si quieres conservar el libro con macros abierto, puede ser así:

Sub Macro2()
'Guarda archivo
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With ThisWorkbook
        nombre = .Name
        nombre = Left(nombre, InStrRev(nombre, ".") - 1)
        ruta = .Path & "\"
        .SaveCopyAs ruta & "respaldo.xlsm"
        Set l2 = Workbooks.Open(ruta & "respaldo.xlsm")
        l2.SaveAs _
            Filename:=ruta & nombre & ".xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        l2.Close False
    End With
    MsgBox "Libro creado sin macros"
End Sub

.Prueba ambas macros y revisa cuál es la que necesitas.

.

.

Hola Dante.

Intento unir a tus macros  esta macro

ThisWorkbook.SaveCopyAs "C:\prueba \" & Range("D1").Value & ".xlsm"

El objetivo es hacer una copia a un libro que contiene macros dandole a la copia el nombre que hay en la celda D1 del libro origen , que la copia no lleve las macros del libro origen ,  que el libro origen no se cierre y que el libro copiado quede cerrado.   Lo he intentado pero no lo consigo.   

¿Se puede hacer?

Un saludo de José Segura

Te anexo la macro actualizada

Solamente revisa el nombre de la carpeta y que la carpeta exista.

Nota: También tienes que poner la hoja donde está el dato de la celda "D1"

Y por último, si en la celda D1 tienes una fecha, hay que poner el formato así:

nombre = Format(Sheets("Hoja1"). Range("D1"). Value, "dd-mm-yyyy")



Sub Macro2()
'Guarda archivo
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With ThisWorkbook
        nombre = Sheets("Hoja1").Range("D1").Value
        ruta = "C:\prueba\"
        arch = nombre & ".xlsm"
        .SaveCopyAs ruta & arch
        Set l2 = Workbooks.Open(ruta & arch)
        l2.SaveAs _
            Filename:=ruta & nombre & ".xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        l2.Close False
    End With
    MsgBox "Libro creado sin macros"
End Sub

No olvides valorarme.

Lo hace perfecto pero me hace dos copias; una sin macros xlsx y otra con las macros xlsm.

como puedo evitar que haga la segunda. ?

Va la macro

Sub Macro2()
'Guarda archivo
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With ThisWorkbook
        nombre = Format(Sheets("Hoja1").Range("D1").Value, "dd-mm-yyyy")
        ruta = "C:\prueba\"
        ruta = "C:\trabajo\"
        arch = nombre & ".xlsm"
        .SaveCopyAs ruta & arch
        Set l2 = Workbooks.Open(ruta & arch)
        l2.SaveAs _
            Filename:=ruta & nombre & ".xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        l2.Close False
        Kill ruta & arch
    End With
    MsgBox "Libro creado sin macros"
End Sub

No olvides valorar la respuesta.

Va la macro

Sub Macro2()
'Guarda archivo
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With ThisWorkbook
        nombre = Format(Sheets("Hoja1").Range("D1").Value, "dd-mm-yyyy")
        ruta = "C:\prueba\"
        arch = nombre & ".xlsm"
        .SaveCopyAs ruta & arch
        Set l2 = Workbooks.Open(ruta & arch)
        l2.SaveAs _
            Filename:=ruta & nombre & ".xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        l2.Close False
        Kill ruta & arch
    End With
    MsgBox "Libro creado sin macros"
End Sub

No olvides valorar la respuesta.

He cambiado el parametro de la fecha dejando esta primera linea como 
la segunda. Y ya hace solo una copia, pero lo curioso es que tarda 
unos 6 segundos, cuando hacia las 2 copias era casi instantaneo ¿?    
nombre = Format(Sheets("Hoja1").Range("D1").Value, "dd-mm-yyyy")
Nombre = Format(Sheets("hoja1").Range("D1"), Value)
  

Puede ser por la memoria de la máquina.

No entendí cuál línea dejaste en la macro, en la segunda línea pusiste una coma antes de Value y debe llevar punto.

No le veo problemas a mi macro, tal vez tienes abiertas otras aplicaciones y eso también hace lento el proceso.

Perdón perdón, he guardado el archivo y al abrirlo de nuevo ya si hace la copia en 1 segundo.

Gracias por su ayuda y perdone tanta repregunta.

Saludos de José Segura de Almería...

No hay problema.

Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas