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 FileSystemObjectDim filFile As FileDim txsStream As TextStreamDim lngErrNum As LongDim strPath As StringDim strErrText As StringSet fsoSysObj = New FileSystemObject' Store error information.lngErrNum = errX.NumberstrErrText = errX.Description' Clear error.errX.Clear' Return Windows Temp folder.strPath = GetTempDirIf Len(strPath) = 0 ThenGoTo LogError_EndEnd IfOn Error Resume Next' See if file already exists.Set filFile = fsoSysObj.GetFile(strPath & APP_ERROR_LOG)' If not, then create it.If Err <> 0 ThenSet filFile = fsoSysObj.CreateTextFile(strPath & APP_ERROR_LOG)End IfOn 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 strErrTextIf Len(strProcName) > 0 Then .WriteLine strProcName.WriteLine Now.WriteBlankLines 1.CloseEnd WithLogError_End:Exit SubEnd 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
André Luiz Bernardes