Cómo añadir marca de tiempo "Última actualización" en Excel con macro

Excel no tiene función nativa "última vez guardado" que no se actualice al abrir. AHORA() y HOY() son volátiles (cambian al abrir/calcular). La solución: macro VBA que lee la propiedad integrada "Last Save Time" del archivo.

Pasos (Excel 365, 2021, 2019, 2016, 2013, 2010)

  1. Guarda tu libro como Libro de Excel habilitado para macros (.xlsm): Archivo > Guardar como > Tipo: Libro de Excel habilitado para macros (*.xlsm).
  2. Pulsa Alt+F11 para abrir Editor VBA.
  3. En Explorador de proyectos (izquierda), clic derecho en VBAProject (TuLibro.xlsm) > Insertar > Módulo.
  4. Pega este código en el módulo:
    Function ULTIMA_ACTUALIZACION() As Date
        ' Devuelve la fecha/hora del último guardado del libro
        On Error Resume Next
        ULTIMA_ACTUALIZACION = ThisWorkbook.BuiltinDocumentProperties("Last Save Time")
        On Error GoTo 0
    End Function
  5. Cierra Editor VBA (vuelve a Excel).
  6. En la celda donde quieres la fecha, escribe: =ULTIMA_ACTUALIZACION() y pulsa Enter.
  7. Formatea la celda: clic derecho > Formato de celdas > Fecha o Personalizada (ej. dd/mm/aaaa hh:mm).
  8. Guarda el archivo (Ctrl+S). La fecha se actualizará solo al guardar, no al abrir.

💡 Mejoras

  • Para que se actualice automáticamente al guardar, añade en ThisWorkbook (doble clic en ThisWorkbook en Explorador VBA):
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Application.CalculateFullRebuild ' Fuerza recálculo de la UDF
    End Sub
  • Si usas OneDrive/SharePoint (AutoGuardado), la propiedad "Last Save Time" se actualiza en cada auto-guardado (cada pocos segundos). La macro reflejará eso.

⚠️ Advertencias

  • Archivos .xlsm (macros) pueden ser bloqueados por antivirus, firewalls corporativos, email (Outlook, Gmail). Firma digital el proyecto VBA (Herramientas > Propiedades del proyecto > Firma digital) o comparte vía enlace OneDrive/SharePoint.
  • La propiedad "Last Save Time" es de metadatos del archivo OOXML. Si copias el archivo (Explorador > Copiar/Pegar), la copia tiene nueva fecha de creación/modificación de Windows, pero la propiedad interna "Last Save Time" se conserva del original hasta que se guarda en Excel.
  • Funciona en Windows y Mac (Excel 2016+ Mac).

🔧 Alternativa sin macros (Power Query / Office Scripts / Python en Excel)

En Excel 365 con Python en Excel (Insiders): =PY(ThisWorkbook.BuiltinDocumentProperties["Last Save Time"]). En Power Automate / Office Scripts: leer propiedad vía Graph API.