Brug en lukket projektmappe som en database (DAO) ved hjælp af VBA i Microsoft Excel

Anonim

Med procedurerne herunder kan du bruge DAO til at hente et rekordsæt fra en lukket projektmappe og læse/skrive data.
Kald proceduren sådan:
GetWorksheetData "C: \ Foldername \ Filename.xls", "SELECT * FROM [SheetName $]", ThisWorkbook.Worksheets (1) .Range ("A3")
Erstat SheetName med det regnearksnavn, du vil hente data fra.

Sub GetWorksheetData (strSourceFile As String, strSQL As String, TargetCell As Range) Dim db As DAO.Database, rs As DAO.Recordset, f As Integer, r Så længe TargetCell ikke er noget så afslut Sub On Error Resume Next Set db = OpenDatabase (strSourceFile, False, True, "Excel 8.0; HDR = Yes;") 'read only' Indstil db = OpenDatabase (strSourceFile, False, False, "Excel 8.0; HDR = Yes;") 'write' Set db = OpenDatabase ( "C: \ Foldername \ Filename.xls", False, True, _ "Excel 8.0; HDR = Yes;") 'read only' Set db = OpenDatabase ("C: \ Foldername \ Filename.xls", False, False, _ "Excel 8.0; HDR = Ja;") 'skriv om fejl GoTo 0 Hvis db ikke er noget, så kan MsgBox "Kan ikke finde filen!", VbExclamation, ThisWorkbook.Name Afslut Sub End Hvis' 'liste regnearksnavne' For f = 0 Til db.TableDefs.Count - 1 'Debug.Print db.TableDefs (f) .Name' Næste f 'åbner et rekordsæt Ved fejl Genoptag Næste sæt rs = db.OpenRecordset (strSQL)' Sæt rs = db.OpenRecordset ( "SELECT * FROM [SheetName $]") 'Set rs = db.OpenRecordset ("SELECT * FROM [SheetName $]" & _ "WHERE [Field Name] LIKE 'A*'") 'Set rs = db.OpenRecordset ("SELECT*FROM [SheetName $]" & _ "WHERE [Field Name] LIKE' A*'ORDER BY [Field Name]" ) Ved fejl GoTo 0 Hvis rs er ingenting, så kan MsgBox "Kan ikke åbne filen!", VbExclamation, ThisWorkbook.Name db.Close Set db = Intet Afslut Sub End Hvis RS2WS rs, TargetCell rs.Close Set rs = Intet db. Luk Sæt db = Intet Slut Sub Sub RS2WS (rs Som DAO.Recordset, TargetCell As Range) Dim f As Integer, r As Long, c As Long If rs Nothing Nothing Exit Sub If TargetCell Is Nothing Herefter Afslut Sub Med Application .Calculation = xlCalculationManual .ScreenUpdating = False .StatusBar = "Skrivning af data fra rekordsæt …" Slut med med TargetCell.Cells (1, 1) r = .Række c = .Kolonne Afslut med med TargetCell.Parent .Range (.Cells (r, c) ), .Cells (.Rows.Count, c + rs.Fields.Count - 1)). Ryd 'ryd eksisterende indhold' skriv kolonneoverskrifter For f = 0 Til rs.Fields.Count - 1 ved fejl Genoptag næste. Celler ( r, c + f) .Formula = rs.Fields (f) .Name On Error GoTo 0 Næste f 'skriv rec ord om fejl Genoptag næste rs.MoveFirst Ved fejl 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) .Formula = rs.Fields (f) .Værdi ved fejl GoTo 0 Næste f rs.MoveNext Loop .Rows (TargetCell.Cells (1, 1) .Row) .Font.Bold = True .Columns ("A: IV"). AutoFit Slut med med applikation .StatusBar = Falsk .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub

Makroeksemplerne forudsætter, at dit VBA -projekt har tilføjet en reference til DAO -objektbiblioteket.
Du kan gøre dette inde fra VBE ved at vælge menuen Værktøjer, Referencer og vælge Microsoft DAO x.xx Object Library.