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.

image

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

Descargar el ejemplo Crear un histórico y saber cuántas veces se abre un archivo de Excel – EXCELeINFO.rar

You may also like...

17 Responses

  1. Juan says:

    Ya perdonarás, pero la instrucción “Dim AppObject As New clsApp” me da “Error de Compilación: No se ha definido el tipo definido por el usuario”.
    ¿Qué puedo estar haciendo mal?.
    Gracias, Juan

    • Valida por favor qu este código que publi esté en un módulo de clase:

      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

      Cualquier cosa comentas.

  2. Juan says:

    Disculpa; he estado en el fuera y no podía acceder.
    Sí, creé un modulo de clase e introduje el código que indicas.
    El error “Error de Compilación: No se ha definido el tipo definido por el usuario”, me da en “Dim AppObject As New clsApp”
    Gracias, Juan.

  3. Súbelo por favor en zip para poderlo descargar.

  4. Juan says:

    http://sdrv.ms/UjLD3q
    A ver si así vale.
    Gracias.

  5. Ezequiel says:

    Hola Juan.

    Estoy interesado en la posibilidad de poder generar un log de operaciones pero la macro no me funciona. Seguí todos los pasos e inclusive los comentarios pero no puedo hacerla fucionar. No me da ningún error, pero no escribe nada en el .csv.

    Sugerencias???

    • sergioacamposh says:

      El archivo csv está en la misma carpeta que el archivo de Excel ??

      Valida por favor que el módulo de clase se llame clsApp.

      • Ezequiel says:

        Hola Sergio. Los dos archivos estan en la misma carpeta y el módulo de clase se llama clsApp.
        Adjunto imágenes…

        • sergioacamposh says:

          Podrás compartime tus archivos ? Me interesa ver el código.

          • sergioacamposh says:

            Ya vi dónde está el error y ya lo modifiqué en el artículo. Faltaba añadire la diagonal invertida antes del nombre del archivo .csv para que lo tome como ruta completa.

            Fname = Application.ActiveWorkbook.Path & “logfile.csv”

          • Ezequiel says:

            Buenos días Sergio.
            Ahora funciona perfecto.

            En mi caso realicé una pequeña modificación en la línea
            txt = txt & “,” & Application.UserName ya que trabajamos con archivos en red.
            Para saber que usuario abrió o cerró el archivo utilizo txt = txt & “,” & Environ(“username”).

            Gracias nuevamente.
            Seguimos en contacto.

  1. October 29, 2012

    […] Macro para crear un log y saber cuántas veces se abre un archivo de Excel […]

  2. October 16, 2013

    […] […]

Leave a Reply

Your email address will not be published.

%d bloggers like this: