Importar datos desde un archivo de texto (ADO) utilizando VBA en Microsoft Excel
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.