Microsoft Excel'de VBA kullanarak kapalı bir çalışma kitabını veritabanı (DAO) olarak kullanma

Anonim

Aşağıdaki prosedürlerle, kapalı bir çalışma kitabından bir kayıt kümesi almak ve verileri okumak/yazmak için DAO'yu kullanabilirsiniz.
Prosedürü şöyle çağırın:
GetWorksheetData "C:\Foldername\Filename.xls", "SELECT * FROM [SheetName$]", ThisWorkbook.Worksheets(1).Range("A3")
SheetName'i veri almak istediğiniz çalışma sayfası adıyla değiştirin.

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 Eğer TargetCell Hiçbir Şey Değilse Sub On Error Devam Et Sonraki Set db = OpenDatabase (strSourceFile, False, True, "Excel 8.0;HDR=Yes;") ' salt okunur '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;") ' salt okunur 'Set db = OpenDatabase("C:\Foldername\Filename.xls", False, False, _ "Excel 8.0;HDR=Yes;") ' Yazma Hatasında GoTo 0 If db Hiçbir Şey Değilse MsgBox "Dosya bulunamıyor!", vbExclamation, ThisWorkbook.Name Exit Sub End If ' ' çalışma sayfası adlarını listele ' f için = 0 db.TableDefs.Count'a - 1 ' Debug.Print db.TableDefs(f).Name ' Sonraki f ' bir kayıt kümesi aç Hatada Devam Et Sonraki Set rs = db.OpenRecordset(strSQL) ' Set rs = db.OpenRecordset( "SELECT * FROM [SheetName$]") ' Set rs = db.OpenRecordset("SELECT * FROM [SheetName$]'dan" & _ "WHERE [Alan Adı] 'A*' GİBİ") ' Set rs = db.OpenRecordset("SELECT * FROM [SheetName$] " & _ "WHERE [Alan Adı] GİBİ 'A*' SİPARİŞİ [Alan Adı]" ) Hatada GoTo 0 Eğer rs Hiçbir Şey Değilse MsgBox "Dosyayı açamıyor!", vbExclamation, ThisWorkbook.Name db.Close Set db = Hiçbir Şeyden Çık Alt Uç Eğer RS2WS rs, TargetCell rs.Close Set rs = Hiçbir Şey 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 Uzun rs Hiçbir Şey Değilse Sub'dan Çıkın HedefHücre Hiçbir Şey Değilse Sub'dan Çıkın O zaman Uygulama ile Sub'dan çıkın. = xlCalculationManual .ScreenUpdating = False .StatusBar = "Kayıt kümesinden veri yazılıyor… " TargetCell.Cells(1, 1) ile Bitiyor r = .Row c = .Column End With TargetCell.Parent .Range(.Cells(r, c) ), .Cells(.Rows.Count, c + rs.Fields.Count - 1)).Temizle 'mevcut içeriği temizle' sütun başlıklarını yaz For f = 0 To rs.Fields.Count - 1 Hatada Devam Et Sonraki .Cells( r, c + f).Formül = rs.Fields(f).Name On Error GoTo 0 Sonraki f ' write rec ords Hatada Devam Sonraki rs.MoveFirst Hatada GoTo 0 Yap Değilken rs.EOF r = r + 1 For f = 0 To rs.Fields.Count - 1 Hatada Devam Et Sonraki .Cells(r, c + f).Formula = rs.Fields(f).Value On Error GoTo 0 Sonraki f rs.MoveNext Loop .Rows(TargetCell.Cells(1, 1).Row).Font.Bold = True .Columns("A:IV").AutoFit Uygulama İle Bitir .StatusBar = False .Calculation = xlCalculationAutomatic .ScreenUpdating = True End with End Sub

Makro örnekleri, VBA projenizin DAO nesne kitaplığına bir başvuru eklediğini varsayar.
Bunu, Araçlar, Başvurular menüsünü seçip Microsoft DAO x.xx Nesne Kitaplığı'nı seçerek VBE içinden yapabilirsiniz.