¿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
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:
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.