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

Съдържание

С процедурите по -долу можете да използвате DAO, за да извлечете набор от записи от затворена работна книга и да четете/записвате данни.
Извикайте процедурата така:
GetWorksheetData "C: \ Foldername \ Filename.xls", "SELECT * FROM [SheetName $]", ThisWorkbook.Worksheets (1). Range ("A3")
Заменете SheetName с името на работния лист, от което искате да извлечете данни.

Sub GetWorksheetData (strSourceFile As String, strSQL As String, TargetCell As Range) Dim db As DAO.Database, rs As DAO.Recordset, f As Integer, r As Long If TargetCell is Nothing then Exit Sub On Error Resume Next set db = OpenDatabase (strSourceFile, False, True, "Excel 8.0; HDR = Да;") 'само за четене' Set db = OpenDatabase (strSourceFile, False, False, "Excel 8.0; HDR = Yes;") 'write' Set db = OpenDatabase ( "C: \ Име на папка \ Име на файл.xls", Неверно, Вярно, _ "Excel 8.0; HDR = Да;") 'само за четене' Задайте db = OpenDatabase ("C: \ Име на папка \ Име на файла.xls", Неверно, Неверно, _ "Excel 8.0; HDR = Да;") 'напишете при грешка GoTo 0 If db Is Nothing then MsgBox "Can't find the file!", VbExclamation, ThisWorkbook.Name Exit Sub End If' 'list имена на работни листове' For f = 0 За db.TableDefs.Count - 1 'Debug.Print db.TableDefs (f). Име' Следващ f 'отваря набор от записи При възобновяване на грешка Следващ набор rs = db.OpenRecordset (strSQL)' Задайте rs = db.OpenRecordset ( "SELECT * FROM [SheetName $]") 'Задайте rs = db.OpenRecordset ("SELECT * FROM [SheetName $]" & _ "WHERE [Име на поле] КАТО 'A*'") '' Задайте rs = db.OpenRecordset ("SELECT*FROM [SheetName $]" & _ "WHERE [Име на поле] КАТО 'A*' ORDER BY [Име на поле]" ) При грешка GoTo 0 Ако rs не е нищо, тогава MsgBox „Не мога да отворя файла!“, VbExclamation, ThisWorkbook.Name db.Close Set db = Нищо не излиза от Sub End Ако RS2WS rs, TargetCell rs.Close Set rs = Нищо db. Затваряне Set db = Нищо Край Sub Sub RS2WS (rs Като DAO.Recordset, TargetCell As Range) Dim f As Integer, r As Long, c As Long Ако rs е нищо, след това излезте от Sub, ако TargetCell не е нищо, след това излезте от Sub с приложение. = xlCalculationManual .ScreenUpdating = false. ), .Cells (.Rows.Count, c + rs.Fields.Count - 1)). Изчистете „изчистване на съществуващото съдържание“ заглавки на колони за запис за f = 0 За rs.Fields.Count - 1 On Error Resume Next .Cells ( r, c + f). Формула = rs.Fields (f). Име при грешка GoTo 0 Следваща f 'запис rec ords On Error Resume Next rs.MoveFirst On Error GoTo 0 Do While Not rs.EOF r = r + 1 For f = 0 To rs.Fields.Count - 1 On Error Resume Next .Cells (r, c + f). Формула = rs.Fields (f) .Value On Error GoTo 0 Next f rs.MoveNext Loop .Rows (TargetCell.Cells (1, 1) .Row). Font.Bold = True .Columns ("A: IV"). AutoFit Завършване с приложение .StatusBar = False .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub

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

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave