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.
2 Responses
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
tiene que percatarse que el archivo este en UTF-8