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 Finché TargetCell non è nulla, quindi esci da sub Set cn = New ADODB.Connection On Error Resume Next cn.Open “DRIVER = \ {Microsoft Excel Driver ( * .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 On Error GoTo 0 If cn Is Nothing Then MsgBox “Impossibile trovare il file! “, vbExclamation, ThisWorkbook.Name Exit Sub End If ‘open a recordset Set rs = New ADODB.Recordset On Error Resume Next 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 “SELEZIONA DA [SheetName $] WHERE [Nome campo] COME ‘A% ‘”, _ cn, adOpenStatic, adLockOptimistic, adCmdText’ rs.Open” SELEZIONA DA [SheetName $] WHERE [Field Name] LIKE ‘A%’ ORDER BY [Field Name] “, _ cn, adOpenStatic, adLockOptimistic, adCmdText ‘opzionale modi di recuperare un recordset ‘Set rs = cn.Execute (“[A1: Z1000]”)’ primo foglio di lavoro ‘Set rs = cn.Execute (“[DefinedRangeName]”)’ qualsiasi foglio di lavoro On Error GoTo 0 If rs Is Nothing Then MsgBox “Impossibile aprire the file! “, vbExclamation, ThisWorkbook.Name cn.Close Set cn = Nothing Exit Sub End If RS2WS rs, TargetCell ‘TargetCell.CopyFromRecordset rs’ approccio opzionale per Excel 2000 o successivo If rs.State = adStateOpen Then rs.Close End If Set rs = Nothing cn.Close Set cn = Nothing End Sub 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.