Используйте закрытую книгу в качестве базы данных (ADO) с помощью VBA в Microsoft Excel
С помощью описанных ниже процедур вы можете использовать ADO для извлечения набора записей из закрытой книги и чтения / записи данных.
Вызовите процедуру так:
GetWorksheetData «C: FoldernameFilename.xls», «SELECT * FROM [SheetName $];», ThisWorkbook.Worksheets (1) .Range («A3»)
Замените SheetName именем рабочего листа, из которого вы хотите получить данные.
Sub GetWorksheetData (strSourceFile как строка, strSQL как строка, TargetCell как диапазон)
Dim cn как ADODB.Connection, rs как ADODB.Recordset, f как Integer, r до тех пор, пока TargetCell не имеет значения, затем выйти из поднабора cn = New ADODB.Connection при ошибке Возобновить следующий cn.Open «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 При ошибке GoTo 0 Если cn — ничего, то MsgBox «Не удается найти файл! «, vbExclamation, ThisWorkbook.Name Exit Sub End If ‘открыть набор записей Set rs = New ADODB.Recordset On Error Resume Далее rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText’ rs.Open» SELECT FROM «[SheetName $] , _ cn, adOpenForwardOnly, adLockReadOnly, adCmdText ‘rs.Open «ВЫБРАТЬ ИЗ [SheetName $]», _ cn, adOpenStatic, adLockOptimistic, adCmdText’ rs.Open »ВЫБРАТЬ ИЗ [SheetName $] LIKE [Имя поля] ‘», _ cn, adOpenStatic, adLockOptimistic, adCmdText’ rs.Open» SELECT FROM [SheetName $] WHERE [Field Name] LIKE ‘A%’ ORDER BY [Field Name] «, _ cn, adOpenStatic, adLockOptimistic, adCmdText ‘необязательно способы получения набора записей ‘Set rs = cn.Execute («[A1: Z1000]»)’ первый рабочий лист ‘Set rs = cn.Execute («[DefinedRangeName]»)’ любой рабочий лист On Error GoTo 0 If rs Is Nothing Then MsgBox «Не удается открыть файл! «, vbExclamation, ThisWorkbook.Name cn.Close Set cn = Nothing Exit Sub End If RS2WS rs, TargetCell ‘TargetCell.CopyFromRecordset rs’ необязательный подход для Excel 2000 или более поздней версии Если rs.State = adStateOpen Then rs.Close End If Set rs = Nothing cn.Close Set cn = Nothing End Sub В примере макроса предполагается, что ваш проект VBA добавил ссылку на библиотеку объектов ADO.
Вы можете сделать это из VBE, выбрав в меню Инструменты, Ссылки и выбрав Microsoft ActiveX Data Objects x.x Object Library.