Añadir LOG en VBA (O Como Escribir en un Fichero TXT)

Tenemos nuestro código en VBA listo para ejecutarse, con variables, condiciones, bucles… Puede que depurando nos baste, pero en ocasiones podemos necesitar escribir en un fichero externo que al ejecutarse nos pueda dar en un solo lugar toda la información que queramos.
En primer lugar, creamos una función que se encargue de comprobar si un fichero existe del siguiente modo:

Public Function FileExists(strFullPath As String) As Boolean
    If Not Dir(strFullPath,vbDirectory) = vbNullString Then
        FileExists = True
    End If
End Function

Y luego crearemos una función que escriba el LOG:

Public Function WriteInTxt(text As String)
    Dim logFile As String
    logFile = "C:MyLogFile.txt"
    If text = "CLEAR" Then
        If FileExists(logFile) Then
            SetAttr logFile, vbNormal
            Kill logFile
        End If
    Else
        Open logFile For Append As #1
        Print #1, Now & " - " & text
        Close #1
    End If
End Function

Hay muchas formas de crear esta función. Por ejemplo se podría añadir como parámetro de entrada un Boolean que determinara si se debe borrar o no el fichero de LOG antiguo, pero en mi caso era mucho más sencillo utilizar un comando en el texto, ya que borraba el archivo al inicio y el resto de llamadas eran de LOG, por lo que de este modo al inicio de mi código escribía:

WriteLog("CLEAR") 'En lugar de WriteLog("", true)

Y el resto de llamadas eran del tipo:

WriteLog("Some Info") 'En lugar de WriteLog("Some Info", false)

En el caso de escribir LOG, simplemente abrimos el fichero en modo ‘Append’ para que añada el texto en una nueva línea al final, escribimos dicha línea y cerramos el fichero.
Se pueden crear otras variaciones añadiendo parámetros de entrada, como por ejemplo especificar qué función es la que escribe la línea del LOG. Un ejemplo más completo podría ser:

Public Function WriteInTxt(fileLog As String, functionLog As String, textLog As String, clearLog As Boolean)
    If clearLog Then
        If FileExists(fileLog) Then
            SetAttr fileLog, vbNormal
            Kill fileLog
        End If
    Else
        Open fileLog For Append As #1
        Print #1, Now & " - [" & functionLog & "] " & textLog
        Close #1
    End If
End Function

Y a partir de aquí, las necesidades que tenga cada uno.

Categories:

2 Responses

  1. Muchas gracias por el aporte. Me hacía falta la sentencia FOR APPEND para que no sobreescriba como FOR OUTPUT, porqua la ayuda “F1” no aclara eso.
    Saludos

  2. Alberto says:

    tiene que percatarse que el archivo este en UTF-8

Leave a Reply to Matias Rodriguez Cancel reply

Your email address will not be published. Required fields are marked *