Archive

Posts Tagged ‘Print’

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

October 25, 2012 9 comments

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

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 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

Escribir datos en un archivo de texto desde Excel con vba

August 27, 2011 6 comments

Expongo un pequeño ejemplo sobre cómo escribir datos desde Excel a un archivo de Texto.

El usuario podrá utilizar es libre de utilizar For, Do Loop, While, etc.

Sub EscribirEnArchivoTxt()
Open "c:\data\textfile.txt" For Output As #1
Print #1, ActiveSheet.Range("A1").Value
Print #1, ActiveSheet.Range("A2").Value
Print #1, ActiveSheet.Range("A3").Value
Close #1
End Sub
Categories: Trucos, vba Tags: , , ,