Đăng ký học Excel và VBA cùng GPE tháng 11 - TPHCM

Đăng ký học Excel và phân tích số liệu cùng GPE tháng 12 - TPHCM

Mua sách "VBA trong Excel - Cải thiện và tăng tốc" tái bản

Xuất dử liệu từ Access ra Excel và ngược lại

Thảo luận trong 'Cơ sở dữ liệu' bắt đầu bởi kellyfe, 22 Tháng sáu 2007.

  1. kellyfe

    kellyfe Thành viên chính thức

    mình đang sử dụng một chương trình phần mềm access quản lý hệ thống kế toán, nay mình muốn lấy những thông tin từ chương trình phần mền ra excel để làm báo cáo một số việc nhưng mình không biết cách để xuất liệu ra, vì chương trình phần mềm mình sử dụng lại không có chức năng xuất ra excel, có cao thủ nào biết cách chỉ giúp mình với, mình xin đa tạ và hứa dẫn đi ăn kem...
     
  2. anhphuong

    anhphuong Thân Thương

    Có nhiều cách xuất dữ liệu tư Ac ra Ex. Ở đây xin giới thiệu với bạn 2 cách đơn giản nhất
    1/ Xuất dữ liệu tứ Table ra : Mở chương trình Ac, chọn table cần xuất, vào menu File chọn Export, chọn Microsoft Excel...từ hộp Save as types tuỳ phiên bản bạn muốn xuất, đặt tên file, chọn thư mục lưu rồi nhấn Export . Cuối cùng mở file Ex vừa lưu để xem và chỉnh sửa
    2/ Xuất dữ liệu của 1 Report : Mở Report cần xuất .Nhấn biểu tượng OfficeLinks, chọn Analyze It with Microsoft Office Excel
     
  3. kellyfe

    kellyfe Thành viên chính thức

    à mình quên là mình sử dụng phần mềm, nên không có những chức năng như anhphuong hướng dẫn, làm sao đây???
     
  4. levanduyet

    levanduyet Thành viên danh dự

    Chào bạn,
    Tất cả các phần mềm thông thường đều hổ trợ xuất ra Excel. Nếu không có hổ trợ thì ... chắc có lẻ là phần mềm không tốt.
    Vì hầu hết các phần mềm hiện nay đều cho xuất ra định dạng Excel.

    Lê Văn Duyệt
     
  5. kellyfe

    kellyfe Thành viên chính thức

    levanduyet ơi mình xem trên diễn đàn mình công nhận bạn là cao thủ đó, không biết mình có một số câu hỏi muốn thỉnh giáo với bạn bạn có bằng lòng không???
     
  6. levanduyet

    levanduyet Thành viên danh dự

    Mình không nghỉ như vậy.
    Bạn cứ việc post lên diễn đàn sẽ có người "chung tay".

    Lê Văn Duyệt
     
  7. kellyfe

    kellyfe Thành viên chính thức

    mình có một file quản lý kho và quản lý công nợ khi nhập kho, in phiếu nhập xuất kho và bảng báo cáo tổng hợp kho, toàn bộ file mình chỉ sử dụng công thức chứ không lập trình vì mình không biết về lập trình, mình muốn post bài này lên để mọi người tham khảo và có ai có thể lập trình để thay thế cho những công thức mình làm thì giúp mình với, nay mình không biết cách để post lên, file mình đến >4KB lận, mình phải làm sao?
     
  8. kellyfe

    kellyfe Thành viên chính thức

  9. XuanThanh

    XuanThanh Thành viên hoạt động

    1/ Nếu bạn muốn post bài xin hãy đọc bài kỹ thuật post bài đăng trong diễn đàn này
    2/ Nếu không được xin gửi qua mail của anh Duyệt hoặc của ai đó cung được, các bạn đó sẽ post bài giùm
    Thân
     
  10. luongthuhien

    luongthuhien Thành viên mới

    Anh Duyet oi! Giup em voi.
    Lam the nao de tu dong dua so lieu tu bang tong hop theo doi tai san ra cac So tai san chi tiet theo don vi su dung va cac the tai san theo tung loai tai san? Xin hay chi ro cho em vi em moi hoc Excel ma (Xin moi nguoi dung cuoi nha!)
     
  11. levanduyet

    levanduyet Thành viên danh dự

    Chào bạn Kellyfe,

    Thật ra nếu để ý các vấn đề các bạn trên trang web này quan tâm thông thường là:
    _Nhập, In phiếu Xuất/Nhập; Thu/Chi; Hóa đơn; Phiếu tạm ứng,...In làm nhiều trang, Tổng ở cuối mỗi trang in,...
    _Nhập / xuất / tồn...
    _Nhập dữ liệu chi tiết, sau đó đưa ra bảng tổng hợp lại.
    _Tạo các form để nhập liệu cho nhanh.
    Tôi nghĩ đó là lý do bạn thấy các bài gần gũi với những gì bạn làm.

    Nếu bạn không thể post bài thì gởi cho tôi, tôi sẽ giúp bạn đưa lên.

    Bạn nên đưa ra bài toán cụ thể của bạn, mọi người sẽ trợ giúp. Và chú ý: viết tiếng việt có dấu.

    Lê Văn Duyệt
     
  12. huuthe

    huuthe Thành viên mới

    Xin chỉ giúp có cách nào để nhận diện máy Scaner ( loại cầm tay hoặc máy scaner để bàn ) trong excel để khi scan một sản phẩm thì nó lọc trong danh sách đã được tạo sẵn trong đó và ghi lên một sheet nào đó trong excel . Nếu không có trong danh sách thì hỏi có cập nhật không , để cập nhật trong danh sách Nếu có file sẵn thì cho xin

    Thành thật cảm ơn . Tôi đang cần gấp .

     
  13. vbavn

    vbavn Thành viên chính thức

    Lấy dữ liệu từ Access đặt vào Excel

    (Nguồn: http://www.excelguru.ca/node/23)

    Đôi khi chúng ta cần lấy dữ liệu từ Access và đặt chúng vào Excel chỉ cần dựa vào SQL. Một ví dụ như Add-in của anh Tuân A-Tools

    Xin giới thiệu các bạn bài viết dựa trên đường link trên:
    _Mục đích: Lấy dữ liệu từ Access đặt vào Worksheet trong Excel. Sử dụng ADO + SQL.
    _Chú ý:
    + Không có lấy tiêu đề (Tên trường). Chúng ta có thể sửa lại đoạn code để thực hiện yêu cầu của mình.
    + Phải tham chiếu đến Microsoft ActiveX Data Objects Libary.
    + Sử dụng từ office 2003 trở về trước.

    Đoạn code chính (các bạn đặt trong module)
    PHP:
    Option Explicit

    'Constant for Database connection string'
    Private Const glob_DBPath "C:\Temp\Examples.mdb"
    Private Const glob_sConnect _
                   
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" glob_DBPath ";"

    Private Sub RetrieveRecordset(strSQL As StringclTrgt As Range)
    'Author       : Ken Puls ([URL="http://www.excelguru.ca/"]www.excelguru.ca[/URL])'
    'Macro Purpose: To retrieve a recordset from a database (via an SQL query) and place'
    '               it in the supplied worksheet range'
    'NOTE         : Requires a reference to "Microsoft ActiveX Data Objects 2.x Library"'
    '               (Developed with reference to version 2.0 of the above)'

        
    Dim cnt As New ADODB.Connection
        Dim rst 
    As New ADODB.Recordset
        Dim rcArray 
    As Variant
        Dim lFields 
    As Long
        Dim lRecrds 
    As Long
        Dim lCol 
    As Long
        Dim lRow 
    As Long

        
    'Open connection to the database'
        
    cnt.Open glob_sConnect

        
    'Open recordset based on Orders table'
        
    rst.Open strSQLcnt

        
    'Count the number of fields to place in the worksheet'
        
    lFields rst.Fields.Count

        
    'Check version of Excel'
        
    If Val(Mid(Application.Version1InStr(1Application.Version".") - 1)) > 8 Then
            
    'EXCEL 2000 or 2002: Use CopyFromRecordset'

            'Copy the recordset from the database'
            
    On Error Resume Next
            clTrgt
    .CopyFromRecordset rst
            
            
    'CopyFromRecordset will fail if the recordset contains an OLE'
            'object field or array data such as hierarchical recordsets'
            
    If Err.Number <> 0 Then GoTo EarlyExit
        
        
    Else
            
    'EXCEL 97 or earlier: Use GetRows then copy array to Excel'

            'Copy recordset to an array'
            
    rcArray rst.GetRows

            
    'Determine number of records (adds 1 since 0 based array)'
            
    lRecrds UBound(rcArray2) + 1

            
    'Check the array for contents that are not valid when'
            'copying the array to an Excel worksheet'
            
    For lCol 0 To lFields 1
                
    For lRow 0 To lRecrds 1
                    
    'Take care of Date fields'
                    
    If IsDate(rcArray(lCollRow)) Then
                        rcArray
    (lCollRow) = Format(rcArray(lCollRow))
                        
    'Take care of OLE object fields or array fields'
                    
    ElseIf IsArray(rcArray(lCollRow)) Then
                        rcArray
    (lCollRow) = "Array Field"
                    
    End If
                
    Next lRow
            Next lCol

            
    'Transpose and place the array in the worksheet'
            
    clTrgt.Resize(lRecrdslFields).Value TransposeDim(rcArray)
        
    End If

    EarlyExit:
        
    'Close and release the ADO objects'
        
    rst.Close
        cnt
    .Close
        Set rst 
    Nothing
        Set cnt 
    Nothing
        On Error 
    GoTo 0

    End Sub
    Mã:
    [B]Private Function TransposeDim(v As Variant) As Variant[/B]
    'Function Purpose:  Transpose a 0-based array (v)'
    
        Dim x As Long, Y As Long, Xupper As Long, Yupper As Long
        Dim tempArray As Variant
    
        Xupper = UBound(v, 2)
        Yupper = UBound(v, 1)
    
        ReDim tempArray(Xupper, Yupper)
        For x = 0 To Xupper
            For Y = 0 To Yupper
                tempArray(x, Y) = v(Y, x)
            Next Y
        Next x
    
        TransposeDim = tempArray
    
    [B]End Function[/B]
    Các bạn dùng thủ tục sau để đưa dữ liệu ra Excel

    PHP:
    Sub GetRecords()
    'Macro Purpose: To retrieve a recordset to an Excel worksheet'

        
    Dim sSQLQry As String
        Dim rngTarget 
    As Range

        
    'Generate the SQL query and set the range to place the data in'
        
    sSQLQry "SELECT tblMoorages.CustID, tblMoorages.Type, " _
                
    "tblMoorages.DatePaid, tblMoorages.Amount FROM tblMoorages;"
        
    ActiveSheet.Cells.ClearContents
        Set rngTarget 
    ActiveSheet.Range("A2")

        
    'Retrieve the records'
        
    Call RetrieveRecordset(sSQLQryrngTarget)

    End Sub
    Nếu có thể chúng ta có thể viết một hàm để lấy dữ liệu giống như A-Tools của Anh Tuân.

    VBAVN
     
  14. vbavn

    vbavn Thành viên chính thức

    Xuất dữ liệu từ Range vào Access

    (Nguồn: http://www.excelguru.ca/node/18)

    Khi chúng ta đã phát triển các công cụ của chính mình như Lấy dữ liệu từ Access ra Excel.
    Chắc chắn chúng ta sẽ nghĩ về cách ngược lại là xuất dữ liệu từ Range vào bảng trong Access.
    Chúng ta hãy cùng nhau xem ví dụ ở trang link trên:

    Mã:
    Sub DB_Insert_via_ADOSQL()
    'Author       : Ken Puls ([URL="http://www.excelguru.ca/"]www.excelguru.ca[/URL])
    'Macro purpose: To add record to Access database using ADO and SQL
    'NOTE:  Reference to Microsoft ActiveX Data Objects Libary required
    
        Dim cnt As New ADODB.Connection, _
                rst As New ADODB.Recordset, _
                dbPath As String, _
                tblName As String, _
                rngColHeads As Range, _
                rngTblRcds As Range, _
                colHead As String, _
                rcdDetail As String, _
                ch As Integer, _
                cl As Integer, _
                notNull As Boolean
    
        'Set the string to the path of your database as defined on the worksheet
        dbPath = ActiveSheet.Range("B1").Value
        tblName = ActiveSheet.Range("B2").Value
        Set rngColHeads = ActiveSheet.Range("tblHeadings")
        Set rngTblRcds = ActiveSheet.Range("tblRecords")
    
        'Concatenate a string with the names of the column headings
        colHead = " ("
        For ch = 1 To rngColHeads.Count
            colHead = colHead & rngColHeads.Columns(ch).Value
            Select Case ch
                Case Is = rngColHeads.Count
                    colHead = colHead & ")"
                Case Else
                    colHead = colHead & ","
            End Select
        Next ch
    
        'Open connection to the database
        cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=" & dbPath & ";"
    
        'Begin transaction processing
        On Error GoTo EndUpdate
        cnt.BeginTrans
    
        'Insert records into database from worksheet table
        For cl = 1 To rngTblRcds.Rows.Count
    
            'Assume record is completely Null, and open record string for concatenation
            notNull = False
            rcdDetail = "('"
    
            'Evaluate field in the record
            For ch = 1 To rngColHeads.Count
                Select Case rngTblRcds.Rows(cl).Columns(ch).Value
                        'if empty, append value of null to string
                    Case Is = Empty
                        Select Case ch
                            Case Is = rngColHeads.Count
                                rcdDetail = Left(rcdDetail, Len(rcdDetail) - 1) & "NULL)"
                            Case Else
                                rcdDetail = Left(rcdDetail, Len(rcdDetail) - 1) & "NULL,'"
                        End Select
    
                        'if not empty, set notNull to true, and append value to string
                    Case Else
                        notNull = True
                        Select Case ch
                            Case Is = rngColHeads.Count
                                rcdDetail = rcdDetail & rngTblRcds.Rows(cl).Columns(ch).Value & "')"
                            Case Else
                                rcdDetail = rcdDetail & rngTblRcds.Rows(cl).Columns(ch).Value & "','"
                        End Select
                End Select
            Next ch
    
            'If record consists of only Null values, do not insert it to table, otherwise
            'insert the record
            Select Case notNull
                Case Is = True
                    rst.Open "INSERT INTO " & tblName & colHead & " VALUES " & rcdDetail, cnt
                Case Is = False
                    'do not insert record
            End Select
        Next cl
    
    EndUpdate:
        'Check if error was encounted
        If Err.Number <> 0 Then
            'Error encountered.  Rollback transaction and inform user
            On Error Resume Next
            cnt.RollbackTrans
            MsgBox "There was an error.  Update was not succesful!", vbCritical, "Error!"
        Else
            On Error Resume Next
            cnt.CommitTrans
        End If
    
        'Close the ADO objects
        cnt.Close
        Set rst = Nothing
        Set cnt = Nothing
        On Error GoTo 0
    End Sub
    _Chú ý:
    + Range A3:F3 được đặt tên là "tblHeadings"
    + Range A4:F11 được đặt tên là "tblRecords"
    + Phải tham chiếu đến Microsoft ActiveX Data Objects Libary

    [​IMG]

    Việc áp dụng các vấn đề cơ bản mà tác giả giới thiệu chúng ta sẽ thực tập ở bài sau và áp dụng cho việc lưu giữ và truy vấn các hóa đơn.

    VBAVN
     
  15. levanduyet

    levanduyet Thành viên danh dự

    Lấy dữ liệu từ Access, tạo báo cáo trong Excel

    To: BinhTam, và các thành viên khác,

    Do vô ý tôi xóa bài đầu tiên của tôi trong thread (tôi post giúp BinhTam, nhưng sau đó BinhTam lại post tiếp ở thread thứ #2). Vì vậy topic này cũng bị xóa.
    Tôi thành thật xin lỗi. BinhTam vui lòng post lại các file của em lên theo Topic này.

    Xin cám ơn các bạn.

    Lê Văn Duyệt
     
  16. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    Theo tôi, nếu BinhTam chỉ muốn làm báo cáo như vậy và bạn có biết về Query, biết về export to excel. Nếu bạn muốn theo cách gia công.
    1/ Query make table
    2/ Export to excel, có thể 2 file: Data và Slsx (table)
    3/ Mở file báo cáo, đưa 2 file trên vào.
    4/ In báo cáo.
    Nếu bạn OK như vậy tôi sẽ làm cho. Do tôi không rành lắm về ADO hay get ...
    Xin gởi file cho BinhTam.
     

    Các file đính kèm:

    Lần chỉnh sửa cuối: 15 Tháng ba 2008
  17. BinhTam

    BinhTam Thành viên thường trực

    access-excel

    Gui lại file đính kèm để các bạn tham khảo.

     

    Các file đính kèm:

    • Book1.zip
      Kích thước:
      38.8 KB
      Đọc:
      438
    • NPL.zip
      Kích thước:
      16.3 KB
      Đọc:
      295
  18. BinhTam

    BinhTam Thành viên thường trực

    access-excel

    theo cách làm của bạn, khi mình thay đổi số lượng,dm,tlhh trong bảng access thì file báo cáo trong excel có được thay đổi theo hay ko?



     
  19. ThuNghi

    ThuNghi Hãy cho rồi sẽ nhận!

    Thì bạn làm lại các bước như trên. Còn không nghiên cứu về A Tools của anh Tuân. Tại sao không nhập trên Excel luôn.
     
  20. BinhTam

    BinhTam Thành viên thường trực

    access-excel

    nhập liệu trên excel không tốt lắm, đôi khi mình phải dò tên NPL rồi nhập dm,tlhh nếu 1 style thì cố gắng cũng được đằng này quá nhiều style, mỗi lần nhập thấy nhức mắt.
    Từ lúc tạo bảng trong access mình thấy nhập liệu rất thoải mái.

     

Chia sẻ trang này