Użyj zamkniętego skoroszytu jako bazy danych (DAO) przy użyciu VBA w Microsoft Excel

Anonim

Za pomocą poniższych procedur możesz użyć DAO do pobrania zestawu rekordów z zamkniętego skoroszytu i odczytu/zapisu danych.
Wywołaj procedurę w ten sposób:
GetWorksheetData "C:\Foldername\Filename.xls", "SELECT * FROM [SheetName$]", ThisWorkbook.Worksheets(1).Range("A3")
Zastąp SheetName nazwą arkusza, z którego chcesz pobrać dane.

Sub GetWorksheetData(strSourceFile As String, strSQL As String, TargetCell As Range) Dim db As DAO.Database, rs As DAO.Recordset, f As Integer, r Tak długo, jak TargetCell jest niczym, a następnie wyjdź z Sub po błędzie Resume Next Ustaw db = OpenDatabase (strSourceFile, False, True, "Excel 8.0;HDR=Tak;") ' tylko do odczytu ' Ustaw db = OpenDatabase(strSourceFile, False, False, "Excel 8.0;HDR=Tak;") ' write 'Ustaw db = OpenDatabase( "C:\Foldername\Filename.xls", False, True, _ "Excel 8.0;HDR=Yes;") ' tylko do odczytu 'Set db = OpenDatabase("C:\Foldername\Filename.xls", False, False, _ "Excel 8.0;HDR=Tak;") ' pisz Przy błędzie Przejdź do 0 Jeśli db jest niczym Then MsgBox "Nie można znaleźć pliku!", vbExclamation, ThisWorkbook.Name Zakończ Sub End If ' ' wyświetla nazwy arkuszy ' For f = 0 To db.TableDefs.Count - 1 ' Debug.Print db.TableDefs(f).Name ' Next f ' otwórz zestaw rekordów On Error Resume Next Set rs = db.OpenRecordset(strSQL) ' Set rs = db.OpenRecordset( "SELECT * FROM [NazwaArkusza$]") ' Ustaw rs = db.OpenRecordset("SELECT * FROM [NazwaArkusza$]" & _ "WHERE [Field Name] LIKE 'A*'") ' Set rs = db.OpenRecordset("SELECT * FROM [NazwaArkusza$]" & _ "WHERE [Field Name] LIKE 'A*' ORDER BY [Field Name]" ) W przypadku błędu Przejdź do 0 Jeśli rs to nic, to MsgBox "Nie można otworzyć pliku!", vbExclamation, ThisWorkbook.Name db.Close Set db = Nic Wyjdź Sub End Jeśli RS2WS rs, TargetCell rs.Close Set rs = Nic db. Close Set db = Nic End Sub Sub RS2WS(rs As DAO.Recordset, TargetCell As Range) Dim f As Integer, r As Long, c As Long Jeśli rs jest niczym To zakończ Sub Jeśli TargetCell jest niczym To zakończ Sub z aplikacją .Calculation = xlCalculationManual .ScreenUpdating = False .StatusBar = "Zapisywanie danych z zestawu rekordów…" Zakończ z TargetCell.Cells(1, 1) r = .Row c = .Column Zakończ z TargetCell.Parent .Range(.Cells(r, c) ). r, c + f).Formula = rs.Fields(f).Name W przypadku błędu Przejdź do 0 Dalej f ' write rec ords W przypadku błędu Wznów Dalej rs.MoveFirst W przypadku błędu Przejdź do 0 Zrób, gdy nie rs.EOF r = r + 1 Dla f = 0 To rs.Fields.Count - 1 W przypadku błędu Wznów Dalej .Cells(r, c + f).Formula = 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 Zakończ z aplikacją .StatusBar = False .Calculation = xlCalculationAutomatic .ScreenUpdating = True End with End Sub

W przykładach makr założono, że projekt VBA dodał odwołanie do biblioteki obiektów DAO.
Możesz to zrobić z poziomu VBE, wybierając menu Narzędzia, Referencje i wybierając bibliotekę obiektów Microsoft DAO x.xx.