Hay alguna forma con una macro, que al abrir guarde una copia de forma automática?
Es normal que sin querer guardemos cambios que luego NO podremos recuperar.
Ese Back-up debería tener el nombre del archivo y un número asociado que no se regrabe encima de otro anterior.
Saludos.
PD.: si me equivoque de lugar para preguntar, disculpas, decirme donde hacerlo. Soy nuevo acá.
No necesitas ninguna macro.
Tienes la Opción en:
Menú>Herramientas>Opciones>Cargar/Guardar>General - Crear siempre copia de respaldo.
Cómo trabaja esa opción en LibreOffice
- Cada vez que guardas un archivo, LibreOffice crea una copia de respaldo en la carpeta configurada.
- Pero esa copia se sobrescribe en cada guardado: siempre queda solo la última versión, no un historial.
- Es útil para recuperar el archivo si el original se corrompe, pero no sirve como sistema de back‑up con versiones múltiples.
Quizás esta extensión te pueda servir.
Hola.
Disculpen mi demora en contestar.
Hice lo siguiente para esto:
1º Archivo Bu2026.bat:
@echo off
setlocal
:: Configura las variables
set “source_file=C:…\nombre de la carpeta\Alejandro 2026.ods”
set “destination_folder=C:…\nombre de la carpeta\2026BU”
:: Obtén la fecha y la hora actuales
for /f “tokens=1-6 delims=/:., " %%d in (”%date% %time%") do (set “datetime=-%%e-%%d %%g_%%h_%%i”)
:: Copia el archivo con el nuevo nombre
copy “%source_file%” “%destination_folder%\Alejandro- 2026%datetime%.ods”
endlocal
2º genere la siguiente MACRO:
REM ***** Back-Up de Libro al Iniciar *****
Sub EjecutarBackup
Dim oDoc As Object
Dim sFileName As String
Dim sCommand As String
oDoc = ThisComponent
sFileName = oDoc.Title
If Len(sFileName) < 20 Then
sCommand = "C:\........\nombre de la carpeta\Bu2026.bat"
Shell(sCommand, 1)
End If
End Sub
3º activar la MACRO:
Herramientas → Personalizar → Eventos: ‘Evento’= Abrir documento; ‘Acción asignada’= asignar la macro “EjecutarBackup”
Nota: asegúrese de usar comillas rectas (") en el archivo .bat y en la macro.
Al copiar desde esta página, las comillas pueden aparecer tipográficas (“ ”), lo que provoca errores.
Espero lo entiendan.
Con la colaboración en gran medida de la IA “COPILOT”
Espero pronto, publicar el Libro de CONTABILIDAD “ANUAL”, el cual va progresando año a año, a medida que me dan los tiempos para su mejora. Tengo que preparar una AYUDA para su uso.
Saludos.
Hola, creo que no necesitas ejecutar un bat para realizar una copia del fichero
El siguiente procedimiento asignado al evento “Abrir Documento” debería funcionar.
Sub SaveFileAsCopy()
Dim cFile as String
cFile = Replace( ThisComponent.url, ".ods", Format(Now,"MMMDD-HHMMSS")) & ".ods"
ThisComponent.storeToURL( cFile, Array() )
End Sub
Saludos.
Hola, me parece que NO LEISTE todo el desarrollo que presente.
Si esta bueno NO usar un archivo de lotes, mejor una MACRO.
NO conozco todas las funcionalidades de LibreOffice, pero tengo muy presente como deben funcionar las cosas.
Me apoyo en la IA “COPILOT”.
Los ERRORES que cometes, es que cuando abres el Back-Up, vuelves a generar un Back-up del Back-up, además de estar en la misma carpeta del LIBRO de trabajo.
Revisar más adelante, puede haber una nueva versión.
La siguiente MACRO, evitaría el uso de un Archivo por Lotes.
OJO! el nombre del libro debe contener al final el AÑO con cuatro cifras “YYYY”.
Esto debe ser SI o SI, NO cambiar esto porque si abren el archivo en un año diferente, o se genera un nuevo año o se guardan en el Back-Up del año en curso.
Genera automáticamente la carpeta Back-Up como “YYYYBU”; pueden cambiarla a gusto personal.
En caso de leer el archivo de Back-Up, controla que no se genere un nuevo archivo.
El Archivo Back-Up es de ‘solo lectura’.
OJO. Debes nombrar el libro como “NombreDelLibro_2026.ods” o “NombreDelLibro2026.ods”; lo IMPORTANTE es que termine en 2026, para este año en curso.
NOTA: el Back-UP NO es sobre lo que hiciste al cerrarlo, es salvar el libro anterior al abrirlo.
Si hay alguna duda, consultar. Tener paciencia a veces NO puedo contestar inmediatamente.
’ MACRO (guarda el archivo abierto, al abrir)
'hay una nueva versión más adelante"
REM ***** Back-Up de Libro al Iniciar *****
Sub EjecutarBackup()
Dim cFile As String
Dim backupRoot As String
Dim backupPath As String
Dim fileName As String
Dim timeStamp As String
Dim parts() As String
Dim fso As Object
Dim yearFromName As String
' Convertir URL a ruta de Windows
cFile = ConvertFromURL(ThisComponent.URL)
' Carpeta raíz de back-ups (ajusta según tu estructura)
backupRoot = "X:\Nombre de la Ruta donde se ubica la 'Hoja'\"
' Obtener nombre del archivo sin extensión
parts = Split(cFile, "\")
fileName = parts(UBound(parts))
fileName = Left(fileName, Len(fileName) - 4)
' Extraer el año del nombre del libro (últimos 4 caracteres)
yearFromName = Right(fileName, 4)
' Crear carpeta dinámica con el año del libro + "BU"
backupPath = backupRoot & yearFromName & "BU\"
' Crear objeto FileSystem
fso = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
' Si la carpeta no existe, crearla
If Not fso.Exists(ConvertToURL(backupPath)) Then
fso.CreateFolder(ConvertToURL(backupPath))
End If
' Si el archivo ya está en la carpeta de back-ups, salir
If Left(cFile, Len(backupPath)) = backupPath Then Exit Sub
' Construir sello de fecha/hora usando Format
timeStamp = Format(Now,"-MM-DD""_""HH,MM,SS")
' Construir nombre completo del archivo de back-up
Dim backupFile As String
backupFile = backupPath & fileName & timeStamp & ".ods"
' Guardar copia
ThisComponent.storeToURL(ConvertToURL(backupFile), Array())
' Marcar el archivo como solo lectura
fso.SetReadOnly(ConvertToURL(backupFile), True)
End Sub
Si abres el archivo una vez, hace una copia…
Pero si lo abres dos veces, la segunda vez ya no hace la copia y entonces el backup ya no está actualizado con el contenido agregado la primera vez que lo abriste. ???
Con esto haces una copia de seguridad cada vez que abres el archivo. y de hecho la instrucción que he citado en primer lugar no se ejecutaría nunca.
- Tendrás que hacer limpieza de vez en cuando si abres muchas veces el archivo.
Lo probaste?
Porque a mi me anda perfecto.
SI, cada vez que abres el Libro Genera un back-up, esa es la idea.
Luego de un tiempo y si crees necesario que en tu libro NO hay errores borras todos los BU que te parezca.
OJO. Debes nombrar el libro cono LIBRO_2026.ods o LIBRO2026.ods; lo IMPORTANTE es que termine en 2026, para este año en curso.
NOTA: el Back-UP NO es sobre lo que hiciste al cerrarlo, es salvar el libro anterior al abrirlo.
Las siguientes MACROS, Preguntan si desea guardar el archivo al INICIAR y al FINALIZAR
VERSION: 3.1
NOTAS:
1- OJO! el nombre del libro debe contener al final el AÑO con cuatro cifras “YYYY”.
Debes nombrar el libro como “NombreDelLibro_2026.ods” o “NombreDelLibro2026.ods”; lo IMPORTANTE es que termine en 2026, para este año en curso.
Esto debe ser SI o SI, ya que si abren el archivo en un año diferente, NO se genere un nuevo año o se guardan en el Back-Up del año en curso.
2- Genera automáticamente la carpeta Back-Up como “YYYYBU”; pueden cambiarla a gusto personal.
3- En caso de abrir el archivo de Back-Up, controla que no se genere un nuevo archivo.
4- El Archivo Back-Up es de ‘solo lectura’.
Si hay alguna duda, consultar. Tener paciencia a veces NO puedo contestar inmediatamente.
COLABORO: “COPILOT”
MACROS:
Macro backup B 2026-02-15 ASK.odt (37,3 KB)
English version
Macro backup B 2026-02-15 V3,1 ASK eng.odt (34,5 KB)