Hỏi code Truy vấn dữ liệu từ file excel khác, trong cùng 1 thư mục ?

Liên hệ QC

wtvnphu

Thành viên chính thức
Tham gia
3/10/08
Bài viết
59
Được thích
22
Chào các anh em diễn đàn,

Tôi có 1 bài toán khá khó khăn trong công việc, nhờ các anh em hảo ý giúp đỡ.

Tôi có 2 file excel để trong cùng 1 thư mục
File 1 là Danh sách đơn hàng đã hoàn thành tên là Danh_sach_Don_hang_Qua_khu (File ví dụ chỉ có mấy ngàn dòng, thực tế sẽ nhiều hơn, đến tận trăm ngàn dòng)
File 2 là Danh sách các khách hàng đặt hàng tên là Danh_sach_dat_hang

Tôi muốn xử lý bài toán, tại file Danh_sach_dat_hang khi làm việc có thể nhìn thấy lịch sử mua hàng trong quá khứ của Khách hàng dựa vào số điện thoại khách cung cấp
Thông tin các đơn hàng cũ được lọc và trích xuất vào file Danh_sach_dat_hang để tiện cho việc lựa chọn khách hàng.

Mong anh em hỗ trợ và cảm ơn rất nhiều !
 

File đính kèm

  • Truy_Van_Du_lieu.rar
    413.9 KB · Đọc: 40
Chào các anh em diễn đàn,

Tôi có 1 bài toán khá khó khăn trong công việc, nhờ các anh em hảo ý giúp đỡ.

Tôi có 2 file excel để trong cùng 1 thư mục
File 1 là Danh sách đơn hàng đã hoàn thành tên là Danh_sach_Don_hang_Qua_khu (File ví dụ chỉ có mấy ngàn dòng, thực tế sẽ nhiều hơn, đến tận trăm ngàn dòng)
File 2 là Danh sách các khách hàng đặt hàng tên là Danh_sach_dat_hang

Tôi muốn xử lý bài toán, tại file Danh_sach_dat_hang khi làm việc có thể nhìn thấy lịch sử mua hàng trong quá khứ của Khách hàng dựa vào số điện thoại khách cung cấp
Thông tin các đơn hàng cũ được lọc và trích xuất vào file Danh_sach_dat_hang để tiện cho việc lựa chọn khách hàng.

Mong anh em hỗ trợ và cảm ơn rất nhiều !
Bạn thử code sau nhé:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select * From [Sheet1$] Where F2 Like '" & Sheet1.Range("B2") & "' Order By F6 Desc")
    End With
End Sub
 
Upvote 0
Bạn thử code sau nhé:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select * From [Sheet1$] Where F2 Like '" & Sheet1.Range("B2") & "' Order By F6 Desc")
    End With
End Sub
Dạ, cảm ơn anh Hai Lúa nhiều nhiều ! Bài toán đã được giải quyết .
 
Upvote 0
Bạn thử code sau nhé:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select * From [Sheet1$] Where F2 Like '" & Sheet1.Range("B2") & "' Order By F6 Desc")
    End With
End Sub
Anh Hai Lúa ơi, cho em xin 1 đoạn code để refresh dữ liệu thêm vào file Danh_sach_Don_hang_Qua_khu.xlsx với ạ. Khi em thêm đơn hàng vào thì dường như nó không cập nhật kịp qua để truy vấn ở file Danh_sach_dat_hang
Mong anh hỗ trợ thêm lần nữa ạ
 
Upvote 0
Anh Hai Lúa ơi, cho em xin 1 đoạn code để refresh dữ liệu thêm vào file Danh_sach_Don_hang_Qua_khu.xlsx với ạ. Khi em thêm đơn hàng vào thì dường như nó không cập nhật kịp qua để truy vấn ở file Danh_sach_dat_hang
Mong anh hỗ trợ thêm lần nữa ạ
Cập nhật chứ bạn. Hãy thử lại lần nữa xem sao.
 
Upvote 0
Bạn thử code sau nhé:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select * From [Sheet1$] Where F2 Like '" & Sheet1.Range("B2") & "' Order By F6 Desc")
    End With
End Sub
Anh Hai Lúa Miền Tây cho em hỏi thêm 2 câu trong bài này với ạ !

Em muốn lấy qua file chỉ Các cột A,B,C,D,E,F,G,L từ file Danh_sach_Don_hang_Qua_khu, ý là không muốn lấy hết các cột, em nên chỉnh code lại làm sao ạ ?

Với lại chỗ code : Where F2 Like '" & Sheet1.Range("B2") & "' => em không hiểu F2 là chỉ định giá trị nào để so sánh vậy ạ ? hướng dẫn em với ạ !

Cảm ơn anh ạ !
 
Upvote 0
Anh Hai Lúa Miền Tây cho em hỏi thêm 2 câu trong bài này với ạ !

Em muốn lấy qua file chỉ Các cột A,B,C,D,E,F,G,L từ file Danh_sach_Don_hang_Qua_khu, ý là không muốn lấy hết các cột, em nên chỉnh code lại làm sao ạ ?

Với lại chỗ code : Where F2 Like '" & Sheet1.Range("B2") & "' => em không hiểu F2 là chỉ định giá trị nào để so sánh vậy ạ ? hướng dẫn em với ạ !

Cảm ơn anh ạ !

Bạn chỉnh lại như sau:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,F12 From [Sheet1$] Where F2 Like '" & Sheet1.Range("B2") & "' Order By F6 Desc")
    End With
End Sub

F1 tương ứng với cột số 1, F2 tương ứng với cột số 2, F3 tương ứng với cột số 3.... trong vùng dữ liệu nhé bạn

1642813958221.png
 
Upvote 0
Bạn chỉnh lại như sau:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,F12 From [Sheet1$] Where F2 Like '" & Sheet1.Range("B2") & "' Order By F6 Desc")
    End With
End Sub

F1 tương ứng với cột số 1, F2 tương ứng với cột số 2, F3 tương ứng với cột số 3.... trong vùng dữ liệu nhé bạn

View attachment 271716
Cảm ơn anh nhiều nhiều !
 
Upvote 0
Bạn chỉnh lại như sau:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,F12 From [Sheet1$] Where F2 Like '" & Sheet1.Range("B2") & "' Order By F6 Desc")
    End With
End Sub

F1 tương ứng với cột số 1, F2 tương ứng với cột số 2, F3 tương ứng với cột số 3.... trong vùng dữ liệu nhé bạn

View attachment 271716
1644549790597.png

Code này em chạy 1 thời gian, thì sáng nay mở ra chạy nó báo lỗi này ạ.

Anh hướng dẫn em khắc phục với ạ.

1644549850396.png
 
Upvote 0
Upvote 0
Bạn chỉnh lại như sau:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,F12 From [Sheet1$] Where F2 Like '" & Sheet1.Range("B2") & "' Order By F6 Desc")
    End With
End Sub

F1 tương ứng với cột số 1, F2 tương ứng với cột số 2, F3 tương ứng với cột số 3.... trong vùng dữ liệu nhé bạn

View attachment 271716

Em chào thầy @Hai Lúa Miền Tây

Nếu vùng tham chiếu không phải là B2 mà là từ B2:B6 ( Hoăc có thể nhiều hơn ).

Vậy trường hợp này có xài ADO được không thầy.

Em cảm ơn.

1644573306849.png
 
Upvote 0
Em chào thầy @Hai Lúa Miền Tây

Nếu vùng tham chiếu không phải là B2 mà là từ B2:B6 ( Hoăc có thể nhiều hơn ).

Vậy trường hợp này có xài ADO được không thầy.

Em cảm ơn.

View attachment 272078
Bạn thử lại với code sau nhé:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,F12 From [Sheet1$] Where F2 In (select F1 From [EXCEL 12.0;HDR=No;Database=" & ThisWorkbook.FullName & "].[Sheet1$B2:B6] Where F1 Is Not Null) Order By F6 Desc")
    End With
End Sub
 
Upvote 0
Bạn thử lại với code sau nhé:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,F12 From [Sheet1$] Where F2 In (select F1 From [EXCEL 12.0;HDR=No;Database=" & ThisWorkbook.FullName & "].[Sheet1$B2:B6] Where F1 Is Not Null) Order By F6 Desc")
    End With
End Sub

em cảm ơn thầy @Hai Lúa Miền Tây
 
Upvote 0
Bạn thử lại với code sau nhé:

Mã:
Sub LocDL_HLMT()
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Danh_sach_Don_hang_Qua_khu.xlsx;Extended Properties=""Excel 12.0;HDR=NO"""
        Sheet1.Range("G8").CopyFromRecordset .Execute("Select F1,F2,F3,F4,F5,F6,F7,F12 From [Sheet1$] Where F2 In (select F1 From [EXCEL 12.0;HDR=No;Database=" & ThisWorkbook.FullName & "].[Sheet1$B2:B6] Where F1 Is Not Null) Order By F6 Desc")
    End With
End Sub

Em chào thầy @Hai Lúa Miền Tây ạ.

Trường hợp nếu File nguồn ở trên Sever và File đó bị đang mở ở một máy tính khác thì lúc chạy Code sẽ mở File nguồn lên bằng Read Only.

Sau khi lấy dữ liệu xong thì không tắt File nguồn, nếu trường hợp đó thì sẽ như thế nào ạ.

Mong được sự giúp đỡ của thầy ạ.
 
Upvote 0
Em chào thầy @Hai Lúa Miền Tây ạ.

Trường hợp nếu File nguồn ở trên Sever và File đó bị đang mở ở một máy tính khác thì lúc chạy Code sẽ mở File nguồn lên bằng Read Only.

Sau khi lấy dữ liệu xong thì không tắt File nguồn, nếu trường hợp đó thì sẽ như thế nào ạ.

Mong được sự giúp đỡ của thầy ạ.
Code sẽ lấy dữ liệu cho dù file đó đang mở hay đóng mà bạn.
 
Upvote 0
Code sẽ lấy dữ liệu cho dù file đó đang mở hay đóng mà bạn.

Lúc em chạy code thì nó lấy dữ liệu bình thường.

Em chỉ thắc mắc là lúc chạy Code nó mở File nguồn lên bằng Read Only, lấy dữ liệu xong thì em không thấy đóng File lại thầy ạ.

Mà vẫn để File nguồn ở chế độ Read Only vậy luộn ạ.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom