Use un libro cerrado como una base de datos (ADO) utilizando VBA en Microsoft Excel
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 As ADODB.Connection, rs As ADODB.Recordset, f As Integer, r Tan largo si TargetCell no es nada Entonces Salir del subconjunto 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 en caso de error Ir a 0 Si cn no es nada, entonces MsgBox «¡No se puede encontrar el archivo! «, 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 «SELECT FROM [SheetName $] WHERE [% Field Name] LIKE ‘A’ A ‘», _ cn, adOpenStatic, adLockOptimistic, adCmdText’ rs.Open» SELECT FROM [SheetName $] WHERE [Field Name] LIKE ‘A%’ ORDER BY [Field Name] «, _ cn, adOpenStatic, adLockOptimistic, adCmdText ‘opcional formas de recuperar un conjunto 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 Ir a 0 Si rs no es nada Entonces MsgBox «No se puede abrir the file! «, vbExclamation, ThisWorkbook.Name cn.Close Set cn = Nothing Exit Sub End If RS2WS rs, TargetCell ‘TargetCell.CopyFromRecordset rs’ enfoque opcional para Excel 2000 o posterior Si rs.State = adStateOpen Then rs.Close End If Set rs = Nothing cn.Close Set cn = Nothing 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 el VBE seleccionando el menú Herramientas, Referencias y seleccionando Microsoft ActiveX Data Objects x.x Object Library.