Importar dados de um arquivo de texto (ADO) usando VBA no Microsoft Excel

Anonim

O procedimento a seguir pode ser usado para obter um conjunto de registros ADO de um arquivo de texto e preencher o resultado em uma planilha.

Sub GetTextFileData (strSQL As String, strFolder As String, rngTargetCell As Range) 'exemplo: GetTextFileData "SELECT * FROM filename.txt", _ "C: \ FolderName", Range ("A3")' exemplo: GetTextFileData "SELECT * FROM nomedoarquivo.txt WHERE nomedocampo = 'critérios' ", _" C: \ NomedoPasta ", Intervalo (" A3 ") Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer Se rngTargetCell for Nothing Then Exit Subconjunto cn = Novo ADODB.Connection On Error Resume Next cn.Open "Driver = {Microsoft Text Driver (* .txt; * .csv)};" & _ "Dbq =" & strFolder & ";" & _ "Extensões = asc, csv, tab, txt;" On Error GoTo 0 If cn.State adStateOpen Then Exit Sub Set rs = New ADODB.Recordset On Error Resume Next rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText On Error GoTo 0 If rs.State adStateOpen Set cn.Close = Nothing Exit Sub End If 'os cabeçalhos dos campos For f = 0 To rs.Fields.Count - 1 rngTargetCell.Offset (0, f) .Formula = rs.Fields (f) .Name Next f rngTargetCell.Offset (1, 0 ) .CopyFromRecordset rs 'funciona no Excel 2000 ou posterior' RS2WS rs, rngTargetCell 'funciona no Excel 97 ou anterior rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub

O procedimento pode ser usado assim:

Sub TestGetTextFileData () Application.ScreenUpdating = False Workbooks.Add GetTextFileData "SELECT * FROM filename.txt", "C: \ FolderName", Range ("A3") 'GetTextFileData "SELECT * FROM filename.txt WHERE fieldname =' critérios ' ", _" C: \ FolderName ", Range (" A3 ") Colunas (" A: IV "). AutoAjuste ActiveWorkbook.Saved = True End Sub

Substitua filename.txt pelo nome do arquivo de texto do qual deseja obter os dados.
Substitua C: \ FolderName pelo nome da pasta onde o arquivo de texto foi salvo.

A primeira linha no arquivo de texto será usada como títulos de colunas / nomes de campos.
Cada coluna com datwa deve ser separada com o caractere separador de lista que é usado no regional
configurações no Painel de controle. Na Noruega, geralmente é o ponto-e-vírgula (;); em outros países, pode ser uma vírgula (,).
Você encontrará o procedimento RS2WS clicando neste link.

O exemplo de macro pressupõe que seu projeto VBA adicionou uma referência à biblioteca de objetos ADO.
Você pode fazer isso de dentro do VBE selecionando o menu Ferramentas, Referências e selecionando Microsoft
Biblioteca de objetos ActiveX Data Objects x.x.