Използвайте затворена работна книга като база данни (ADO), използвайки VBA в Microsoft Excel

Anonim

С процедурите по -долу можете да използвате ADO, за да извлечете набор от записи от затворена работна книга и да четете/записвате данни.
Извикайте процедурата така:

GetWorksheetData "C: FoldernameFilename.xls", "SELECT * FROM [SheetName $];", ThisWorkbook.Worksheets (1). Range ("A3")
Заменете SheetName с името на работния лист, от което искате да извлечете данни.

Sub GetWorksheetData (strSourceFile As String, strSQL As String, TargetCell As Range)
Dim cn като ADODB.Свързване, rs като ADODB.Recordset, f като цяло число, r като дълго
Ако TargetCell не е нищо, излезте от Sub
Задайте cn = Нова ADODB.Свързване
На грешка възобновяване на следващо
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
При грешка GoTo 0
Ако cn не е нищо, тогава
MsgBox "Не мога да намеря файла!", VbExclamation, ThisWorkbook.Name
Изход от Sub
Край Ако

'отвори набор от записи
Задайте rs = Нов ADODB.Recordset
На грешка възобновяване на следващо
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 [Име на поле] КАТО' A%'", _
cn, adOpenStatic, adLockOptimistic, adCmdText
'rs.Open "SELECT * FROM [SheetName $] WHERE [Field Name] КАТО' A%'ORDER BY [Field Name]", _
cn, adOpenStatic, adLockOptimistic, adCmdText

'незадължителни начини за извличане на набор от записи
'Set rs = cn.Execute ("[A1: Z1000]")' първия работен лист
'Set rs = cn.Execute ("[DefinedRangeName]")' всеки работен лист

При грешка GoTo 0
Ако rs не е нищо, тогава
MsgBox „Файлът не може да се отвори!“, VbExclamation, ThisWorkbook.Name
cn.Затвори
Задайте cn = Нищо
Изход от Sub
Край Ако

RS2WS RS, TargetCell
„TargetCell.CopyFromRecordset rs“ незадължителен подход за Excel 2000 или по -нова версия

Ако rs.State = adStateOpen Тогава
rs.Затвори
Край Ако
Задайте rs = Нищо
cn.Затвори
Задайте cn = Нищо
End Sub

Примерът за макрос предполага, че вашият VBA проект е добавил препратка към библиотеката с обекти на ADO.
Можете да направите това от VBE, като изберете менюто Инструменти, Препратки и изберете Microsoft
ActiveX Data Objects x.x Object Library.