VBA Tips - Guardando mensagens de Erro num arquivo Texto - Logging Errors to a Text File - Scripting Runtime object library - Scrrun.dll

Termo de Responsabilidade 
Inline image 1

A biblioteca de objetos Scripting Runtime simplifica o código necessário para ler e gravar em um arquivo de texto. Para utilizar os novos objetos para gravar um arquivo de texto, você retorna um objeto que se refere a um arquivo novo ou existente, e então usa o método OpenAsTextStream para abrí-lo como entrada ou saída. O método tem um argumento OpenAsTextStream IOMode, que pode ser definido para indicar se você quer ler o arquivo, escrever nele, ou anexá-lo.

Sub LogError (errX As ErrObject, Optional strProcName As String)
            
   ' This procedure logs errors to a text file. It is used in
   ' this chapter to log synchronization errors.
   '
   ' Arguments:
   ' errX: A variable that refers to the VBA Err object.

   Dim fsoSysObj    As FileSystemObject
   Dim filFile      As File
   Dim txsStream    As TextStream
   Dim lngErrNum    As Long
   Dim strPath      As String
   Dim strErrText   As String
   
   Set fsoSysObj = New FileSystemObject
   
   ' Store error information.
   lngErrNum = errX.Number
   strErrText = errX.Description
   ' Clear error.
   errX.Clear
   ' Return Windows Temp folder.
   strPath = GetTempDir
   If Len(strPath) = 0 Then
      GoTo LogError_End
   End If
   
   On Error Resume Next
   ' See if file already exists.
   Set filFile = fsoSysObj.GetFile(strPath & APP_ERROR_LOG)
   ' If not, then create it.
   If Err <> 0 Then
      Set filFile = fsoSysObj.CreateTextFile(strPath & APP_ERROR_LOG)
   End If
   On Error GoTo 0

   ' Open file as text stream for reading.
   Set txsStream = filFile.OpenAsTextStream(ForAppending)
   ' Write error information and close.
   With txsStream
      .WriteLine lngErrNum
      .WriteLine strErrText
      If Len(strProcName) > 0 Then .WriteLine strProcName
      .WriteLine Now
      .WriteBlankLines 1
      .Close
   End With

LogError_End:
   Exit Sub
End Sub

O método OpenAsTextStream retorna um objeto TextStream, que é o objeto que usa para trabalhar com o texto no arquivo. Para ler uma linha, por exemplo, escolha o método ReadLine do objeto TextStream; para escrever uma linha, opte usar o método WriteLine. Quando terminar de trabalhar com o arquivo, use o método Close para fechá-lo.

O procedimento acima registra um erro em um arquivo texto. Recebe dois argumentos: um argumento ErrObject, que é uma referência ao objeto Err o qual contém o erro atual, e um argumento opcional strProcName, que especifica o nome do procedimento onde ocorreu o erro.

O procedimento LogError grava em um arquivo de texto na pasta C:\Windows\Temp. Para determinar onde a pasta Temp do Windows é, ele chama um outro procedimento, o procedimento GetTempDir. Este procedimento faz uma chamada a API do Windows para determinar a pasta Temp. O Windows não consegue inicializar sem uma pasta Temp designada.

O procedimento LogError é usado para registrar vários erros. A primeira vez que o procedimento é chamado, nenhum arquivo de log existe, por isso deve criar um. Em cada chamada subseqüente, o procedimento deve abrir o arquivo de log existente. A maneira mais simples de fazer isso é olhar para o nome do arquivo que está esperando, se ele não estiver lá, lide com o erro e crie o arquivo.

Infelizmente, quando o procedimento é chamado pela primeira vez e o erro ocorre, a informação existente no objeto Err é limpo e as informações para o novo erro tomam seu lugar. Uma vez que há apenas um objeto Err disponível em VBA, as informações de erro que você passou para o procedimento é perdida quando um novo erro ocorre. Portanto, a primeira coisa que o procedimento faz é armazenar o número do erro e a descrição do erro nas variáveis.

Uma vez que o procedimento tem uma referência para o arquivo texto, abre-o para acrescentar, e em seguida, grava as informações de erro para o arquivo, linha por linha.


O procedimento LogError chama o procedimento GetTempDir, que retorna o caminho para o C:\Windows\Temp chamando a função GetTempPath na API do Windows.  

Tags: VBA, Tips, files, directory, folder, Scripting Runtime object library, Scrrun.dll, Script, OpenAsTextStream, API






Nenhum comentário:

Postar um comentário

diHITT - Notícias