es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo guardar una copia del libro de Excel?

He estado intentando hacer una macro que automáticamente guarde una copia de seguridad de mi libro de Excel antes de editar cualquiera de sus datos.

Cada vez que lo llamo, aunque guarda exitosamente una copia nueva, cuando llega al final el código se detiene de ejecutar, y las macros que intento llamar debajo no se ejecutan.

Creo que cuando ejecuto el código y se crea la nueva versión de respaldo, el código continúa ejecutándose en el libro de respaldo en lugar del libro principal, por lo que cuando cierro el libro de respaldo termino abruptamente el código.

Me gustaría guardar una versión de respaldo de mi libro principal, cerrar la versión de respaldo y continuar el código en el libro principal.

Public Sub BackupWorkbook()

Dim CurrentFile As String, BackupFile As String, DesiredWorkbookName As String
Dim NowDate As String

'Se guarda el código actual y los datos de la hoja de cálculo de Excel
ActiveWorkbook.Save

'Obtener las cadenas necesarias para los nombres de archivo
CurrentFile = ThisWorkbook.FullName

NowDate = Replace(Format(Now, "dd-mm-yyyy, hh:mm:ss"), ":", ".")
BackupFile = ThisWorkbook.Path & "\" & "Chem Chart Backups" & "\" & "Chemical Chart" _
                & " (" & NowDate & ")" & ".xlsm"

'Se guarda el libro activo como un archivo de respaldo, luego se vuelve a abrir el libro principal
ActiveWorkbook.SaveAs BackupFile, FileFormat:=52

Workbooks.Open CurrentFile

'Esto debería cerrar la versión de respaldo del libro que se abrió debido al método SaveAs
Workbooks(DesiredWorkbookName & " (" & NowDate & ")" & ".xlsm").Close SaveChanges:=True

End Sub
Public Sub TestMacros()

Call BackupWorkbook

'Si esta ventana de mensaje aparece después de llamar a la macro, fue exitoso
MsgBox "¡Éxito!"

End Sub
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la variable “DesiredWorkbookName” no tiene asignado un valor, por lo que al intentar cerrar la copia de seguridad no puede encontrar el libro de trabajo para cerrarlo. Para solucionar esto, puedes asignar el nombre del libro de trabajo principal a esta variable al inicio de la macro:

    Public Sub BackupWorkbook()
    
    Dim CurrentFile As String, BackupFile As String, DesiredWorkbookName As String
    Dim NowDate As String
    
    'Asignar el nombre del libro de trabajo principal a la variable de nombre del libro deseado
    DesiredWorkbookName = ThisWorkbook.Name
    
    'Guardar el código actual y los datos de la hoja de cálculo de Excel
    ActiveWorkbook.Save
    
    'Obtener las cadenas necesarias para los nombres de archivo
    CurrentFile = ThisWorkbook.FullName
    
    NowDate = Replace(Format(Now, "dd-mm-yyyy, hh:mm:ss"), ":", ".")
    BackupFile = ThisWorkbook.Path & "\" & "Copias de seguridad de Chem Chart" & "\" & "Chemical Chart" _
                    & " (" & NowDate & ")" & ".xlsm"
    
    'Guardar como el libro de trabajo activo en la ubicación del archivo de copia de seguridad, luego volver a abrir el libro de trabajo principal
    ActiveWorkbook.SaveAs BackupFile, FileFormat:=52
    
    Workbooks.Open CurrentFile
    
    'Cerrar la versión de copia de seguridad del libro que se abrió debido al método SaveAs
    Workbooks(DesiredWorkbookName & " (" & NowDate & ")" & ".xlsm").Close SaveChanges:=True
    
    End Sub
    

    Con esta solución, la macro debería guardar correctamente una copia de seguridad, cerrarla y continuar ejecutándose en el libro de trabajo principal.

Comments are closed.