Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

Thảo luận trong 'Access và VBA' bắt đầu bởi xuanthanh, 3/6/11.

  1. xuanthanh

    xuanthanh Member Hội viên mới

    Dear All!
    Đã có rất nhiều bạn hỏi về việc xuất dữ liệu từ Access ra Excel. Tôi cũng đã nhiều lần muốn nói về chuyện này nhưng ngặt nỗi thời gian không cho phép. Nay tranh thủ hướng dẫn các bạn dùng DAO để chuyển dữ liệu. Các bạn cũng có thể dùng ADODB nhưng sẽ phức tạp hơn và sẽ nói ở một chuyên đề khác.
    Để đơn giản và dễ hình dung, tôi sử dụng một database Access có tên là "Vi du chuyen du lieu tu Ac ra Ex bang DAO". Trong datbase này chỉ có một table duy nhất là tblKhach để ghi toàn bộ danh sách khách hàng có trong CSDL và một form frmKhach để cập nhật DSKH. Tôi không bàn sâu về cách thiết kế table và form vì đã có chuyên đề hướng dẫn riêng. Giả sủ ở đây CSDL đã có dữ liệu sẵn. Bây giờ làm sao đưa được dữ liệu từ table tblKhach ra Excel. Tôi dùng bộ Office 2003. Lưu ý cả file Access và Excel phải để chung cùng một thư mục
    Các bạn thiết kế một file Excel "Danh sach khach hang.xls" như trong file đính kèm. Trong file Access, các bạn xem kỹ phần code ở nút bấm "In Danh Sach". Để làm được việc này, trong cửa sổ modul, các bạn chọn Tools/References... và chọn cho đủ hai thành phần sau :
    1/ Microsoft DAO 3.6 Object Libary(hoặc cao hơn)
    2/ Microsoft Excel 11.0 Object Libary(hoặc cao hơn)
    Toàn bộ phần code của nút "In Danh Sach" như sau
    PHP:
    Private Sub In_Click()
    'Dinh nghia cac bien
        Dim Khach As Recordset
        Set Khach = CurrentDb.OpenRecordset("tblKhach", dbOpenTable)
        Dim Ex As Excel.Application
        Dim Wb As Workbook
        Dim Ws As Worksheet
        Dim TenFile
        Dim k As Integer
    '
    Xac dinh vi tri cac bien
        TenFile 
    CurrentProject.Path "\Danh sach khach hang.xls"
        
    Set Ex = New Excel.Application
        Set Wb 
    Ex.Workbooks.Open(TenFile)
        
    Set Ws Wb.Worksheets("Danh sach")
        
    Ws.Range("A65000").End(xlUp).Row
    'Loc va chuyen du lieu ra Ex
        If Khach.RecordCount = 0 Then MsgBox "Khong co du lieu de in", , "Xin loi": Exit Sub
        Khach.MoveFirst
        Do Until Khach.EOF
            n = Ws.Range("A65000").End(xlUp).Row
            If Ws.Range("A" & n) = "STT" Then Ws.Range("A" & n + 1) = 1 Else Ws.Range("A" & n + 1) = Ws.Range("A" & n) + 1
            Ws.Range("B" & n + 1) = Khach.Fields(0)
            Ws.Range("C" & n + 1) = Khach.Fields(1)
            Ws.Range("D" & n + 1) = Khach.Fields(2)
            Khach.MoveNext
        Loop
    '
    Dinh dang File Ex
        n 
    Ws.Range("A65000").End(xlUp).Row
        Ws
    .Range("A" ":B" n).HorizontalAlignment xlCenter
        With Ws
    .Range("A" ":D" n)
            .
    Borders(xlEdgeLeft).LineStyle xlContinuous
            
    .Borders(xlEdgeRight).LineStyle xlContinuous
            
    .Borders(xlEdgeTop).LineStyle xlContinuous
            
    .Borders(xlEdgeBottom).LineStyle xlContinuous
            
    .Borders(xlInsideVertical).LineStyle xlContinuous
            
    If 1 Then .Borders(xlInsideHorizontal).LineStyle xlDot
        End With
    'Xoa bien, giai phong bo nho va cho Ex hien thi
        Khach.Close
        Ex.Visible = True
        Set Ex = Nothing
    End Sub
    Các bạn download file bên dưới về nghiên cứu. Có gì thắc mắc hoặc chưa hiểu liên hệ với tôi qua hộp thư bachdanggiang_2006@yahoo.com
    Thân mến

    P/S : Các bạn vào C:-/Windows\System32 tìm xem có file DAO36.dll không, nếu không có thì tìm trên google mà chép vào
    Như vậy sẽ không bị lổi
     

    Các file đính kèm:

    • Vi Du.rar
      Kích thước:
      21.8 KB
      Đọc:
      1,267
    Chỉnh sửa cuối: 17/5/13

  2. Mít Ướt

    Mít Ướt Muốn là có thể Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    KO hiểu Mod viết gì ở trên hết, liệu có được liên lạc ko vì rằng thắc mắc toàn tập :blush:
     
  3. domfootwear

    domfootwear Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Còn cách khác tối ưu hơn là khỏi dùng vòng lặp. Chạy nhanh và gọn hơn.
     
  4. socnau

    socnau New Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Bạn có cách nào hay thì chia xẻ cho mọi người học hỏi.
    Cám ơn bạn.
     
  5. xuanthanh

    xuanthanh Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Khi mọi người mới tiếp cận với VBA thì nên hướng dẫn họ từ dễ đến khó
    Thân
     
  6. tht9

    tht9 Ngoan nhất DKT ^^" Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Học access siu đẳng rùi mà đọc vẫn thấy ngu ngu!!!!! :thodai:
     
  7. domfootwear

    domfootwear Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Code của bạn chạy bị lỗi ở dòng
    Mã:
     k = Ws.Range("A65000").End(xlUp).Row
     
  8. xuanthanh

    xuanthanh Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Không lỗi đâu. Bạn kiểm tra lại giùm
    Thân

    P/S : Download thử file của minh về, giải nén vào một thư mục bất kỳ rồi chạy code(Trong file đã có sẵn dữ liệu)
     
  9. domfootwear

    domfootwear Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Chắc chắn mình đã làm như bạn hướng dẫn, lổi ngay dòng ấy.
     
  10. xuanthanh

    xuanthanh Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Bạn kiểm tra lại theo dòng chữ màu đỏ ở #1 xem sao nhé
    Thân
     
  11. domfootwear

    domfootwear Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Cái này thì có bạn à, theo mình thì nên chuyển cái file Excel thành file Template để lấy định dạng, tránh trường hợp ghi chồng hoặc xuất dữ liệu ra lần 2 đến n lần... Không dùng vòng lặp code sẽ ngắn gọn hơn và truy vấn sẽ nhanh hơn. Bạn thử theo ý tưởng mình xem nhé.
     
  12. domfootwear

    domfootwear Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Buồn buồn ngồi làm thử, gửi các anh chị tham khảo.

    Mã:
    Private Sub cmdExport_Click()
    On Error Resume Next
    Dim db As DAO.Database, rs As DAO.Recordset, mySQL As String
    Dim oApp As New Excel.Application, oBook As Excel.Workbook, oSheet As Excel.Worksheet
    
        Set oBook = oApp.Workbooks.Open(CurrentProject.Path & "\Danh sach khach hang.xlt")
        mySQL = "select * from tblKhach"
        Set oSheet = oBook.Sheets("Danh Sach")
        Set db = CurrentDb
        Set rs = db.OpenRecordset(mySQL, dbOpenSnapshot)
        oSheet.Range("b7").CopyFromRecordset rs
        
        With oBook.Sheets("Danh Sach")
            With .Range("A7:A" & .Range("B65000").End(xlUp).Row)
                .FormulaR1C1 = "=ROW()-6"
                .Value = .Value
            End With
        End With
       
        rs.Close
        oApp.Visible = True
        oApp.UserControl = True
        db.Close
     
      Exit Sub
    
    
    End Sub
    
    File đính kèm: Vi Du.rar
     
  13. Access2k

    Access2k Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Lỗi ở dòng trên khi sử dụng khai báo rõ ràng:
    Option Compare Database
    Option Explicit


    Còn chủ thớt không bị do sử dụng khai báo không rõ ràng:
    Option Compare Database
     
  14. suteki

    suteki New Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Co cach nao ma khi minh an In du lieu nhieu lan no chi mo 1 file excel thoi khong ban. Cam on ban nhieu.
     
  15. cpucloi

    cpucloi New Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Sau khi ấn cho thuộc tính của nút ấn enabled = false là xong, không ấn được nút nữa :bdance:
     
  16. Wind_Flower

    Wind_Flower New Member Hội viên mới

    Ðề: Chuyên đề : Sử dụng DAO để chuyển dữ liệu từ Access ra Excel

    Thử vào đây tu luyện xem như thế nào nhé

    Erlandsen Data Consulting
     

Chia sẻ trang này

XenForo Add-ons by Brivium ™ © 2012-2013 Brivium LLC.