Private WithEvents App As Application
Private Sub Workbook_Open()
' Asigna el objeto Application a la variable App cuando este libro se abre
Set App = Application
End Sub
' Este evento se dispara cada vez que se abre un libro de trabajo en la aplicación
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
' Se asegura de no registrar la apertura del propio libro de macros
If [Link] <> "[Link]" Then
RegistrarActividad "Archivo Abierto", [Link]
End If
End Sub
' Este evento se dispara justo antes de que se cierre un libro de trabajo
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
If [Link] <> "[Link]" Then
RegistrarActividad "Archivo Cerrado", [Link]
End If
End Sub
Private Sub RegistrarActividad(ByVal tipoEvento As String, ByVal rutaArchivo As
String)
Dim rutaLog As String
Dim numArchivo As Integer
Dim lineaLog As String
Dim tiempoApertura As Date
Dim duracion As String
' IMPORTANTE: Modifique esta ruta a una carpeta existente en su equipo
rutaLog = "C:\Rutas\De\Registro\log_excel.csv"
numArchivo = FreeFile
If tipoEvento = "Archivo Abierto" Then
' Formato del log: Fecha y Hora, Tipo de Evento, Ruta del Archivo
lineaLog = Now & "," & tipoEvento & ",""" & rutaArchivo & """"
Open rutaLog For Append As #numArchivo
Print #numArchivo, lineaLog
Close #numArchivo
ElseIf tipoEvento = "Archivo Cerrado" Then
' Para calcular la duración, se busca la última vez que el archivo fue
abierto
Dim contenidoArchivo As String
Dim lineas() As String
Dim i As Long
Open rutaLog For Input As #numArchivo
contenidoArchivo = Input$(LOF(numArchivo), numArchivo)
Close #numArchivo
lineas = Split(contenidoArchivo, vbCrLf)
For i = UBound(lineas) To LBound(lineas) Step -1
If InStr(lineas(i), rutaArchivo) > 0 And InStr(lineas(i), "Archivo
Abierto") > 0 Then
On Error Resume Next
tiempoApertura = CDate(Split(lineas(i), ",")(0))
On Error GoTo 0
Exit For
End If
Next i
If tiempoApertura > 0 Then
duracion = Format((Now - tiempoApertura) * 1440, "0.00") & " minutos" '
1440 = 24 horas * 60 minutos
Else
duracion = "No disponible"
End If
' Formato del log: Fecha y Hora, Tipo de Evento, Ruta del Archivo, Duración
lineaLog = Now & "," & tipoEvento & ",""" & rutaArchivo & """," & duracion
Open rutaLog For Append As #numArchivo
Print #numArchivo, lineaLog
Close #numArchivo
End If
End Sub