Con le procedure seguenti è possibile utilizzare ADO per recuperare un recordset da una cartella di lavoro chiusa e leggere/scrivere dati.
Chiama la procedura in questo modo:
GetWorksheetData "C:FoldernameFilename.xls", "SELECT * FROM [SheetName$];", ThisWorkbook.Worksheets(1).Range("A3")
Sostituisci SheetName con il nome del foglio di lavoro da cui vuoi recuperare i dati.
Sub GetWorksheetData(strSourceFile As String, strSQL As String, TargetCell As Range)
Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer, r As Long
Se TargetCell non è nulla, esci da Sub
Imposta cn = New ADODB.Connection
In caso di errore Riprendi Avanti
cn.Open "DRIVER={Driver Microsoft Excel (*.xls)};DriverId=790;ReadOnly=True;" & _
"DBQ=" & strSourceFile & ";"
' DriverId=790: Excel 97/2000
' DriverId=22: Excel 5/95
' DriverId=278: Excel 4
' DriverId=534: Excel 3
In caso di errore Vai a 0
Se cn è niente allora
MsgBox "Impossibile trovare il file!", vbExclamation, ThisWorkbook.Name
Esci Sotto
Finisci se
'apri un recordset
Imposta rs = Nuovo ADODB.Recordset
In caso di errore Riprendi Avanti
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
' rs.Open "SELECT * FROM [SheetName$]", _
cn, adOpenForwardOnly, adLockReadOnly, adCmdText
' rs.Open "SELECT * FROM [SheetName$]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' rs.Open "SELECT * FROM [SheetName$] WHERE [Field Name] LIKE 'A%'", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' rs.Open "SELECT * FROM [SheetName$] WHERE [Field Name] LIKE 'A%' ORDER BY [Field Name]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
'Modi opzionali per recuperare un recordset
' Set rs = cn.Execute("[A1:Z1000]") ' primo foglio di lavoro
' Set rs = cn.Execute("[DefinedRangeName]") ' qualsiasi foglio di lavoro
In caso di errore Vai a 0
Se rs non è niente allora
MsgBox "Impossibile aprire il file!", vbExclamation, ThisWorkbook.Name
cn.Chiudi
Imposta cn = Niente
Esci Sotto
Finisci se
RS2WS rs, TargetCell
Approccio opzionale 'TargetCell.CopyFromRecordset rs' per Excel 2000 o versioni successive
Se rs.State = adStateOpen Then
rs.Chiudi
Finisci se
Imposta rs = Niente
cn.Chiudi
Imposta cn = Niente
Fine sottotitolo
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
Oggetti dati ActiveX x.x libreria di oggetti.