Kết nối giữa Excel với Excel bằng ADO

Liên hệ QC

Cá ngừ F1

( ͡° ͜ʖ ͡°)
Thành viên BQT
Moderator
Tham gia
1/1/08
Bài viết
2,579
Được thích
3,715
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Quan hệ.. và quan hệ..
Sau khi tham khảo cách kết nối truy vấn giữa Excel và Access của a Hai Lúa
E có mạnh dạn thay thế thử kết nối giữa Excel với Excel bằng ADO với câu lệnh sau:
Mã:
Public cnn As New ADODB.Connection
Sub Moketnoi()
Set cnn = New ADODB.Connection
Dim strCNString As String
strCNString = "Data Source=" & ThisWorkbook.Path & "\[COLOR=#ff0000][B]DLG.xlsm[/B][/COLOR]"
With cnn
    .Provider = "Microsoft Jet 4.0 OLE DB Provider"
    .ConnectionString = strCNString
    
    .CursorLocation = adUseClient
    .Open


End With


End Sub

Kết nối với file DLG.xlsm trên cùng folder

Code lấy dữ liệu tất cả các cột:
Mã:
Sub LayDuLieuTatCaCot()
On Error GoTo loi




Dim lsSQL As String: Dim rst As New ADODB.Recordset
If cnn.State <> 1 Then Moketnoi




    lsSQL = "SELECT * " & _
            "FROM tblData"
            
    rst.Open lsSQL, cnn, adOpenStatic, adLockReadOnly
    Cells.ClearContents
    Range("A5").CopyFromRecordset rst
    
rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing
Exit Sub
loi:
MsgBox Err.Description
End Sub

Sau khi chạy code thì báo lỗi: Unrecognize database format
E muỗn hỏi kết nối để truy vấn giữa 2 file Excel thì có dùng ADO được ko? để ko cần phải import dữ liệu vào file nguồn tránh dung lượng file tăng.
Nếu có code trên phải thay đổi thế nào?
 
Sau khi tham khảo cách kết nối truy vấn giữa Excel và Access của a Hai Lúa
E có mạnh dạn thay thế thử kết nối giữa Excel với Excel bằng ADO với câu lệnh sau:
Mã:
Public cnn As New ADODB.Connection
Sub Moketnoi()
Set cnn = New ADODB.Connection
Dim strCNString As String
strCNString = "Data Source=" & ThisWorkbook.Path & "\[COLOR=#ff0000][B]DLG.xlsm[/B][/COLOR]"
With cnn
    .Provider = "Microsoft Jet 4.0 OLE DB Provider"
    .ConnectionString = strCNString
    
    .CursorLocation = adUseClient
    .Open


End With


End Sub

Kết nối với file DLG.xlsm trên cùng folder

Code lấy dữ liệu tất cả các cột:
Mã:
Sub LayDuLieuTatCaCot()
On Error GoTo loi




Dim lsSQL As String: Dim rst As New ADODB.Recordset
If cnn.State <> 1 Then Moketnoi




    lsSQL = "SELECT * " & _
            "FROM tblData"
            
    rst.Open lsSQL, cnn, adOpenStatic, adLockReadOnly
    Cells.ClearContents
    Range("A5").CopyFromRecordset rst
    
rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing
Exit Sub
loi:
MsgBox Err.Description
End Sub

Sau khi chạy code thì báo lỗi: Unrecognize database format
E muỗn hỏi kết nối để truy vấn giữa 2 file Excel thì có dùng ADO được ko? để ko cần phải import dữ liệu vào file nguồn tránh dung lượng file tăng.
Nếu có code trên phải thay đổi thế nào?
hoàn toàn được ,
lưu ý excel 2007 trở lên :
Provider=Microsoft.ACE.OLEDB.12.0
có thể viết :
Mã:
[/B] If Val(Application.Version) < 12 Then
            With cnn
               .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & ";"
                .Open
            End With
        Else
            With cnn
               .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName & ";"
                .Open
            End With
        End If
[B]
 
hoàn toàn được ,
lưu ý excel 2007 trở lên :
Provider=Microsoft.ACE.OLEDB.12.0
có thể viết :
Mã:
Mã:
 [COLOR=#ff0000]If Val(Application.Version) < 12 Then
            With cnn
               .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & ";"
                .Open
            End With
        Else
            With cnn
               .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName & ";"
                .Open
            End With
        End If[/COLOR]
Dạ.. e cảm ơn a.. mà e chưa hiểu cái đoạn đỏ đỏ này cho vào đâu?
 
Dạ.. e cảm ơn a.. mà e chưa hiểu cái đoạn đỏ đỏ này cho vào đâu?

thì cho vào đoạn nào yêu cầu khai báo ConnectionString hay provider :
ví dụ 1 đoạn code trên GPE :
bạn có thể vào topic bài tập ADO để biết thêm chi tiết về khai báo connectionstring!
Mã:
Function GetData(FileName As String, SheetName As String, ParamArray sArr())
    Dim cnn As ADODB.Connection, rst As ADODB.Recordset, lSQL As String, Field As String
    Dim i As Byte
        Set cnn = New ADODB.Connection
        Set rst = New ADODB.Recordset
'-------------------------------------------------------
        If UBound(sArr) - LBound(sArr) + 1 Then
            If UBound(sArr) - LBound(sArr) <> 0 Then
                For i = 0 To UBound(sArr) - LBound(sArr) - 1
                    Field = Field & sArr(i) & ","
                Next
                Field = Field & sArr(UBound(sArr))
            Else
                Field = sArr(UBound(sArr))
            End If
        Else
            Field = "*"
        End If
'----------------------------------------------------------
        If Val(Application.Version) < 12 Then
            With cnn
               .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & ";"
                .Open
            End With
        Else
            With cnn
               .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName & ";"
                .Open
            End With
        End If
        lSQL = "SELECT " & Field & "  FROM [" & SheetName & "];"
        rst.Open lSQL, cnn, 3, 1, 1
        GetData = rst.GetRows
        rst.Close: Set rst = Nothing
        cnn.Close: Set cnn = Nothing


End Function
 
Dạ..e cảm ơn a. E sẽ nghiên cứu thêm ạh..
 
Mình chạy code của bác hungpecc1 thì nhận được thông báo
Run-Time error' -2147467259(80004005)': Unrecognized database format...

Mình đã chạy qua
Sub chuyendl()
Call GetData("book1.xlsx", "sheet1", "A1:H200")
End Sub

Bác xem giúp tại sao với
 
Web KT
Back
Top Bottom