Importare dati da un file di testo (ADO) utilizzando VBA in Microsoft Excel
La procedura seguente può essere utilizzata per ottenere un recordset ADO da un file di testo e inserire il risultato in un foglio di lavoro.
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
La procedura può essere utilizzata in questo modo:
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
Sostituisci nomefile.txt con il nome del file di testo da cui desideri ottenere i dati.
Sostituisci C: \ FolderName con il nome della cartella in cui è stato salvato il file di testo.
La prima riga nel file di testo verrà utilizzata come intestazioni di colonna / nomi di campo.
Ogni colonna con datwa deve essere separata dal carattere separatore di elenco utilizzato nelle impostazioni internazionali nel Pannello di controllo. In Norvegia questo di solito è punto e virgola (;), in altri paesi può essere una virgola (,).
Troverai la procedura RS2WS cliccando su questo link.
L’esempio di macro presuppone che il progetto VBA abbia aggiunto un riferimento alla libreria di oggetti ADO.
Puoi farlo dall’interno del VBE selezionando il menu Strumenti, Riferimenti e selezionando Microsoft ActiveX Data Objects x.x Object Library.