El siguiente procedimiento se puede utilizar para obtener un conjunto de registros ADO de un archivo de texto y completar el resultado en una hoja de trabajo.

Sub GetTextFileData(strSQL As String, strFolder As String, rngTargetCell As Range)

' example: GetTextFileData "SELECT * FROM filename.txt", _

"C:\FolderName", Range("A3")

' example: GetTextFileData "SELECT * FROM filename.txt WHERE fieldname = 'criteria'", _

"C:\FolderName", Range("A3")

Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer

If rngTargetCell Is Nothing Then Exit Sub

Set cn = New ADODB.Connection

On Error Resume Next

cn.Open "Driver={Microsoft Text Driver (.txt; .csv)};" & _

"Dbq=" & strFolder & ";" & _

"Extensions=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 Then

cn.Close

Set cn = Nothing

Exit Sub

End If

' the field headings

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 ' works in Excel 2000 or later

'RS2WS rs, rngTargetCell ' works in Excel 97 or earlier

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing

End Sub

El procedimiento se puede utilizar así:

Sub TestGetTextFileData()

Application.ScreenUpdating = False

Workbooks.Add

GetTextFileData "SELECT * FROM filename.txt", "C:\FolderName", Range("A3")

'    GetTextFileData "SELECT * FROM filename.txt WHERE fieldname = 'criteria'", _

"C:\FolderName", Range("A3")

Columns("A:IV").AutoFit

ActiveWorkbook.Saved = True

End Sub

Reemplace filename.txt con el nombre del archivo de texto del que desea obtener datos.

Reemplace C: \ FolderName con el nombre de la carpeta donde se guarda el archivo de texto.

La primera fila del archivo de texto se utilizará como encabezados de columna / nombres de campo.

Cada columna con datwa debe estar separada con el carácter separador de lista que se utiliza en la configuración regional en el Panel de control. En Noruega, esto suele ser punto y coma (;), en otros países puede ser una coma (,).

Encontrará el procedimiento RS2WS haciendo clic en este enlace.

El ejemplo de macro asume que su proyecto de VBA ha agregado una referencia a la biblioteca de objetos ADO.

Puede hacer esto desde el VBE seleccionando el menú Herramientas, Referencias y seleccionando Microsoft ActiveX Data Objects x.x Object Library.