Použijte uzavřený sešit jako databázi (DAO) pomocí VBA v Microsoft Excelu

Obsah

Pomocí níže uvedených postupů můžete použít DAO k načtení sady záznamů z uzavřeného sešitu a čtení/zápis dat.
Zavolejte postup takto:
GetWorksheetData "C: \ Foldername \ Filename.xls", "SELECT * FROM [SheetName $]", ThisWorkbook.Worksheets (1) .Range ("A3")
Nahraďte SheetName názvem listu, ze kterého chcete načíst data.

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 = 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;") 'pouze ke čtení' Set db = OpenDatabase ("C: \ Foldername \ Filename.xls", False, False, _ "Excel 8.0; HDR = Ano;") 'napsat při chybě GoTo 0 Pokud db není nic, pak MsgBox „Nelze najít soubor!“, VbExclamation, ThisWorkbook.Name Ukončit Sub End If' 'seznam názvů listů' Pro f = 0 To db.TableDefs.Count - 1 'Debug.Print db.TableDefs (f) .Name' Next f 'open a recordset On Error Resume Next Set rs = db.OpenRecordset (strSQL)' Set rs = db.OpenRecordset ( "SELECT * FROM [SheetName $]") 'Set rs = db.OpenRecordset ("SELECT * FROM [SheetName $]" & _ "KDE [Název pole] LIKE 'A*'") 'Set rs = db.OpenRecordset ("SELECT*FROM [SheetName $]" & _ "WHERE [Field Name] LIKE' A*'ORDER BY [Field Name]" ) On Error GoTo 0 If rs Is nothing Then MsgBox "Cannot open the file!", VbExclamation, ThisWorkbook.Name db.Close Set db = Nothing Exit Sub End If RS2WS rs, TargetCell rs.Close Set rs = Nothing db. Close 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 then Exit Sub If TargetCell Is Nothing then Exit Sub with Application .Calculation = xlCalculationManual .ScreenUpdating = False .StatusBar = "Zápis dat ze sady záznamů …" Konec s TargetCell.Cells (1, 1) r = .Row c =. Sloupec Konec s TargetCell.Parent .Range (.Cells (r, c ), .Cells (.Rows.Count, c + rs.Fields.Count - 1)). Vymazat záhlaví sloupců 'vymazat existující obsah' pro f = 0 do rs.Fields.Count - 1 při chybě Pokračovat dále .Cells ( r, c + f). Vzorec = rs.Pole (f). Jméno při chybě Přejít 0 Další f 'napsat 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) .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 Konec s aplikací .StatusBar = False .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub

Příklady maker předpokládají, že váš projekt VBA přidal odkaz na knihovnu objektů DAO.
To lze provést z VBE výběrem nabídky Nástroje, Reference a výběrem Objektové knihovny Microsoft DAO x.xx.

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave