Macro para crear un log y saber cuántas veces se abre un archivo de Excel
Por cualquier motivo que tengamos, la siguiente permite guardar un registro o log de las ocasiones en que abrimos o cerramos un archivo de Excel, siempre y cuando el código lo ingresemos dentro del archivo a auditar y las macros estén habilitadas.
Cómo funciona
Al momento de abrir el archivo lanzamos la ejecución de un procedimiento con el evento Open del libro activo, y en un archivo .CSV se añade una línea que especifica la ruta completa del archivo, la fecha y hora, y el nombre de usuario de Excel, además de un indicativo si el archivo fue abierto o cerrado. El archivo que se creará tendrá como nombre logfile.csv y se creará en la misma carpeta del archivo.
Ver video Macro para crear un histórico y saber cuántas veces se abre un archivo de Excel
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Código
Añadimos en el objeto ThisWorkbook
Private Sub Workbook_Open() Call Iniciar End Sub ' Private Sub Workbook_BeforeClose(Cancel As Boolean) Call Iniciar End Sub
En un módulo normal añadimos
Dim AppObject As New clsApp ' Sub Iniciar() Set AppObject.AppEvents = Application End Sub ' Sub ActualizarLog(Wb) Dim txt As String Dim Fname As String On Error Resume Next txt = Wb.FullName txt = txt & "," & Date & "," & Time txt = txt & "," & Application.UserName txt = txt & "," & "Abierto" Fname = Application.ActiveWorkbook.Path & "\logfile.csv" Open Fname For Append As #1 Print #1, txt Close #1 'MsgBox txt On Error GoTo 0 End Sub ' Sub ActualizarLogSalida(Wb) Dim txt As String Dim Fname As String On Error Resume Next txt = Wb.FullName txt = txt & "," & Date & "," & Time txt = txt & "," & Application.UserName txt = txt & "," & "Cerrado" Fname = Application.ActiveWorkbook.Path & "\logfile.csv" Open Fname For Append As #1 Print #1, txt Close #1 'MsgBox txt On Error GoTo 0 End Sub
Y en un módulo de clase que deberá llamarse clsApp añadimos
Public WithEvents AppEvents As Application ' Private Sub AppEvents_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean) Call ActualizarLogSalida(Wb) End Sub ' Private Sub AppEvents_WorkbookOpen(ByVal Wb As Excel.Workbook) Call ActualizarLog(Wb) End Sub
Descargar el archivo de ejemplo
Crear un histórico y saber cuántas veces se abre un archivo de Excel – EXCELeINFO.rar