Con los procedimientos a continuación, puede usar ADO para recuperar un juego de registros de un libro cerrado y leer / escribir datos.
Llame al procedimiento de esta manera:
GetWorksheetData "C: FoldernameFilename.xls", "SELECT * FROM [SheetName $];", ThisWorkbook.Worksheets (1) .Range ("A3")
Reemplace SheetName con el nombre de la hoja de trabajo de la que desea recuperar los datos.
Sub GetWorksheetData (strSourceFile como cadena, strSQL como cadena, TargetCell como rango)
Dim cn como ADODB.Connection, rs como ADODB.Recordset, f como entero, r como largo
Si TargetCell no es nada, salga de Sub
Establecer cn = New ADODB.Connection
En caso de error, reanudar siguiente
cn.Open "DRIVER = {Controlador de 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
En caso de error, vaya a 0
Si cn no es nada entonces
MsgBox "¡No se puede encontrar el archivo!", VbExclamation, ThisWorkbook.Name
Salir de Sub
Terminara si
'abrir un juego de registros
Set rs = New ADODB.Recordset
En caso de error, reanudar siguiente
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
'rs.Abra "SELECT * FROM [SheetName $]", _
cn, adOpenForwardOnly, adLockReadOnly, adCmdText
'rs.Abra "SELECT * FROM [SheetName $]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
'rs.Abra "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
'formas opcionales de recuperar un juego de registros
'Set rs = cn.Execute ("[A1: Z1000]")' primera hoja de trabajo
'Set rs = cn.Execute ("[DefinedRangeName]")' cualquier hoja de trabajo
En caso de error, vaya a 0
Si rs no es nada, entonces
MsgBox "¡No se puede abrir el archivo!", VbExclamation, ThisWorkbook.Name
cn.Cerrar
Establecer cn = Nada
Salir de Sub
Terminara si
RS2WS rs, TargetCell
Enfoque opcional 'TargetCell.CopyFromRecordset rs' para Excel 2000 o posterior
Si rs.State = adStateOpen Entonces
rs.Cerrar
Terminara si
Establecer rs = Nada
cn.Cerrar
Establecer cn = Nada
End Sub
El ejemplo de macro asume que su proyecto de VBA ha agregado una referencia a la biblioteca de objetos ADO.
Puede hacer esto desde dentro del VBE seleccionando el menú Herramientas, Referencias y seleccionando Microsoft
Biblioteca de objetos ActiveX Data Objects x.x.