Utilizați un registru de lucru închis ca bază de date (DAO) utilizând VBA în Microsoft Excel

Anonim

Cu procedurile de mai jos puteți utiliza DAO pentru a extrage un set de înregistrări dintr-un registru de lucru închis și pentru a citi / scrie date.
Apelați procedura astfel:
GetWorksheetData "C: \ Foldername \ Filename.xls", "SELECT * FROM [SheetName $]", ThisWorkbook.Worksheets (1) .Range ("A3")
Înlocuiți SheetName cu numele foii de lucru din care doriți să preluați date.

Sub GetWorksheetData (strSourceFile As String, strSQL As String, TargetCell As Range) Dim db As DAO.Database, rs As DAO.Recordset, f As Integer, r Atâta timp cât TargetCell nu este nimic, apoi ieșiți din sub eroare Reluați setul următor db = OpenDatabase (strSourceFile, False, True, "Excel 8.0; HDR = Yes;") 'read only' Set 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 = Da;") 'scrie On Error GoTo 0 Dacă db nu este nimic, atunci MsgBox "Nu se poate găsi fișierul!", VbExclamation, ThisWorkbook.Name Exit Sub End If' 'list names worksheet' For f = 0 Pentru a db.TableDefs.Count - 1 'Debug.Print db.TableDefs (f). Numele' Next f 'deschide un set de înregistrări On Error Resume Next Set rs = db.OpenRecordset (strSQL)' Set 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]" ) On Error GoTo 0 Dacă rs nu este nimic, atunci MsgBox „Nu se poate deschide fișierul!”, VbExclamation, ThisWorkbook.Name db.Close Set db = Nothing Exit Sub End If RS2WS rs, TargetCell rs.Close Set rs = Nothing db. Închidere Set db = Nothing End Sub Sub RS2WS (rs As DAO.Recordset, TargetCell As Range) Dim f As Integer, r As Long, c As Long if rs is Nothing Atunci părăsiți Sub dacă TargetCell nu este nimic, apoi ieșiți din Sub cu aplicația. Calcul = xlCalculationManual .ScreenUpdating = False .StatusBar = "Scrierea datelor din setul de înregistrări …" Terminați cu TargetCell.Cells (1, 1) r = .Row c = .Column End With With TargetCell.Parent .Range (.Cells (r, c ), .Cells (.Rows.Count, c + rs.Fields.Count - 1)). Ștergeți „ștergeți conținutul existent” scrieți anteturile coloanei Pentru f = 0 La rs.Fields.Count - 1 La eroare Reîncepeți Următorul .Cells ( r, c + f) .Formula = rs.Fields (f) .Nume On Error GoTo 0 Next f 'write 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 Încheiați cu aplicația .StatusBar = False .Calculation = xlCalculationAutomatic .ScreenUpdating = Adevărat End cu End Sub

Exemplele macro presupun că proiectul dvs. VBA a adăugat o referință la biblioteca de obiecte DAO.
Puteți face acest lucru din VBE selectând meniul Instrumente, referințe și selectând Biblioteca de obiecte Microsoft DAO x.xx.