[Hỏi] Kết nối Excel vs Access bằng ADODB - Truy vấn bị lỗi khi tên sheet trong file Excel không được đặt tên

Liên hệ QC

subasatran

Thành viên hoạt động
Tham gia
17/3/13
Bài viết
114
Được thích
6
Xin chào A/C/E và mọi người.
Em có sử dụng kết nối ADODB kết nối Excel và Access để import data từ excel vào access để xử lý dữ liệu(code import em lấy từ internet).
Tuy nhiên, khi chạy code import thì bị gặp lỗi như sau :
Nếu tên Sheet của file Excel được đặt tên thì code chạy ổn(ví dụ như tên sheet là Data).
Mã:
    Set rs = CreateObject("ADODB.Recordset")
    FilePath = CurrentProject.Path & "\" & FileName & ".xlsx"
    SQL = "select * from [Data$A1:AA]"
    Strconnect = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
                & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;"";")
    rs.Open SQL, Strconnect, 3, 1
Trong trường hợp nếu tên Sheet trong file excel không được đặt tên(có nghĩa là để nguyên mặc định Sheet1).
Thì code import báo lỗi ở câu lệnh SQL.
Mã:
    Set rs = CreateObject("ADODB.Recordset")
    FilePath = CurrentProject.Path & "\" & FileName & ".xlsx"
    SQL = "select * from [Sheet1$A1:AA]"
    Strconnect = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
                & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;"";")
    rs.Open SQL, Strconnect, 3, 1
Vậy mọi người cho em hỏi là :
a. nguyên nhân báo lỗi là do đâu vậy ?
b. Làm sao để khi tên sheet của file excel để nguyên mặc dịnh là Sheet1 thì code vẫn chạy được ạ ?do các file excel này được exporrt từ hệ thống và rất nhiều file nên không thể mở từng file để đặt tên sheet được
Rất cám ơn A/C/E và mọi người giúp đỡ
 
Giải pháp
Tôi không muốn nhắc lại nhưng như thế này cũng là xúc phạm

1698293448649.png

Và như thế này là khiêu khích (gằn giọng lần 2)

1698293489908.png
Chưa biết ai nặng hơn ai.
Thấy cái địa chỉ này lạ lạ nghe: Sheet1$A1:AA]"
Sao AA lại không có chỉ số dòng?
 
Upvote 0
Thấy cái địa chỉ này lạ lạ nghe: Sheet1$A1:AA]"
Sao AA lại không có chỉ số dòng?
Cái code import này trước đây mình cũng search trên internet(không nhớ ở trên diễn đàn nào).
Nhưng nếu tên Sheet của file excel đã được đặt thì thì code chạy được và chạy ổn.
Nếu tên sheet để mặc định là Sheet1 thì sẽ báo lỗi
"Run-time error '-2147467259 (80004005)':
External table is not in the expected format"
 
Upvote 0
Thấy cái địa chỉ này lạ lạ nghe: Sheet1$A1:AA]"
Sao AA lại không có chỉ số dòng?
Bạn thử chưa vậy? Không có địa chỉ dòng thì nó sẽ lấy dữ liệu có trong cột đó. Người ta ghi rõ ràng là [Sheet1$A1:AA] mà bạn ghi xuống cũng sai???

@subasatran Những file mà bạn lấy dữ liệu đó có 1 sheet hay nhiều sheet?
 
Upvote 0
Bạn thử chưa vậy? Không có địa chỉ dòng thì nó sẽ lấy dữ liệu có trong cột đó. Người ta ghi rõ ràng là [Sheet1$A1:AA] mà bạn ghi xuống cũng sai???

@subasatran Những file mà bạn lấy dữ liệu đó có 1 sheet hay nhiều sheet?
@LePhatHuy file dữ liệu excel(đuôi .xlsx) chỉ lấy đúng 1 sheet thôi bạn.
File này được generate từ system/người khác nên mình không thay đổi định dạng/kiểu file...
 
Upvote 0
Cám ơn bạn đã chỉ dẫn nhé. Tôi làm rồi.
Theo tôi thì Maika không biết có quyền hỏi.
- Quang_Hải cho rằng hỏi là "không đúng" thì Quang Hải không đúng.
- LePhatHuy cho rằng không biết thì phải thử, cũng không đúng. Ai không biết cũng phải thử cho biết, không nên hỏi, thì GPE làm sao tồn tại?
- Cantl cho rằng có 1 thành viên có tài nhưng có tật là khiêu khích xúc phạm người khác (dù không biết nói ai)

Tôi xóa hết các bài liên quan.
 
Lần chỉnh sửa cuối:
Upvote 0
@subasatran

Trước hết bạn hãy thử như sau:
Tệp được xuất ra từ phần mềm, hãy mở nó với Excel xem có được không và lưu lại. Sử dụng mã với tệp mới xem thành công không. Nếu thành công tức là tệp đó không phải đuôi xlsx. Có thể nó là một tệp HTML. Lúc này thì bạn cần thay đổi Extended Properties: Excel 12.0 Xml thành HTML Import.

Nếu trong Sheet1 của bạn dữ liệu chỉ thuộc vùng A1:AA thì chỉ cần nhập [Sheet1$] là được.

Trong mã chuỗi kết nối Data Source luôn luôn có dấu định nghĩa cú pháp chuỗi:

JavaScript:
    Strconnect = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & FilePath _
                & "';Extended Properties=""Excel 12.0 Xml;HDR=Yes;"";")
 
Upvote 0
Như vậy hơi thiên vị rồi, đã vi phạm là phải xử. Thấy nhiều không xử cũng không được vì không xử sẽ tạo tiền đề cho những thành viên khác.
Vi phạm có nhiều mức độ, sinh ra nhiều mức xử lý. Bêu tên lên đây cũng là 1 hình thức "xử lý" rồi.
TB:
Tôi xóa tiếp những bài không liên quan chủ đề.
 
Upvote 0
Tôi không muốn nhắc lại nhưng như thế này cũng là xúc phạm

1698293448649.png

Và như thế này là khiêu khích (gằn giọng lần 2)

1698293489908.png
Chưa biết ai nặng hơn ai.
 
Upvote 0
Giải pháp
Nói người khác là dở hơi thì được coi là nhẹ???. Vậy dở hơi là gì???
Nếu bạn muốn tiếp tục trao đổi về nội quy, vi phạm, và xử lý, thì mở chủ đề khác. Nếu cố chấp tra vấn tại đây là vi phạm lần 2, lần 3, và không còn nhẹ nữa.
 
Upvote 0
Tôi hỏi ở trên là file đó có nhiều sheet hay là 1 sheet duy nhất vậy bạn?
Có nhiều file và mỗi file chỉ có một sheet thôi ạ.
Bài đã được tự động gộp:

Ây,
Sáng giờ em ko vào được diễn đàn và giờ vào lại thì thấy câu chuyện nó di khá xa.
Rất xin lôi mọi người vì em câu hỏi của em gây hiểu lầm với A/C.
Thực ra những người trong post này(toàn account em biết) đều đã giúp đỡ em rất nhiều từ trước đến nay nên mọi người thư giãn nhé.
 
Upvote 0
@subasatran

Trước hết bạn hãy thử như sau:
Tệp được xuất ra từ phần mềm, hãy mở nó với Excel xem có được không và lưu lại. Sử dụng mã với tệp mới xem thành công không. Nếu thành công tức là tệp đó không phải đuôi xlsx. Có thể nó là một tệp HTML. Lúc này thì bạn cần thay đổi Extended Properties: Excel 12.0 Xml thành HTML Import.

Nếu trong Sheet1 của bạn dữ liệu chỉ thuộc vùng A1:AA thì chỉ cần nhập [Sheet1$] là được.

Trong mã chuỗi kết nối Data Source luôn luôn có dấu định nghĩa cú pháp chuỗi:

JavaScript:
    Strconnect = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & FilePath _
                & "';Extended Properties=""Excel 12.0 Xml;HDR=Yes;"";")
@ HeSanbi
Cái này có lẽ nó không phải nguyên nhân do kiểu file và loại file.
Vì mình test trên cũng một file dataraw.
1. Nếu tên sheet trong file được đặt tên(giả sử là Data) và câu lệnh SQL = "select * from [Data$A1:AA]" => code chạy ok và import bình thường.
2. Cũng file dataraw đó nếu tên sheet là Sheet1 và câu lệnh SQL = "select * from [Sheet1$A1:AA]" => Code chạy bị lỗi và thông báo lỗi như bên dưới :
"Run-time error '-2147467259 (80004005)':
External table is not in the expected format"
 
Upvote 0
Có nhiều file và mỗi file chỉ có một sheet thôi ạ.
Bài đã được tự động gộp:

Ây,
Sáng giờ em ko vào được diễn đàn và giờ vào lại thì thấy câu chuyện nó di khá xa.
Rất xin lôi mọi người vì em câu hỏi của em gây hiểu lầm với A/C.
Thực ra những người trong post này(toàn account em biết) đều đã giúp đỡ em rất nhiều từ trước đến nay nên mọi người thư giãn nhé.
Bạn hãy thử với câu lệnh sau nhé:

SQL:
select * from [A1:AA]
 
Upvote 0
Cái code import này trước đây mình cũng search trên internet(không nhớ ở trên diễn đàn nào).
Nhưng nếu tên Sheet của file excel đã được đặt thì thì code chạy được và chạy ổn.
Nếu tên sheet để mặc định là Sheet1 thì sẽ báo lỗi
"Run-time error '-2147467259 (80004005)':
External table is not in the expected format"
Trên máy tôi dù có đặt tên khác cho Sheet1 hay để nguyên thì vẫn chạy bình thường.

Chắc ăn hơn là bạn hãy gửi cái file Excel dữ liệu đó lên đây (Chỉ để vài dòng dữ liệu thôi)
 
Upvote 0
Trên máy tôi dù có đặt tên khác cho Sheet1 hay để nguyên thì vẫn chạy bình thường.

Chắc ăn hơn là bạn hãy gửi cái file Excel dữ liệu đó lên đây (Chỉ để vài dòng dữ liệu thôi)
Cám ơn @Maika8008
Để mình gởi file mẫu nhờ mọi người xem giúp nguyên nhân
Trong link để 2 file excel (1 rawdata từ hệ thống với tên Sheet1 và 1 file đã đổi tên sheet là Data) + 1 file access để import data.
Rất cám ơn mọi người.
Link file
Bài đã được tự động gộp:

Bạn hãy thử với câu lệnh sau nhé:

SQL:
select * from [A1:AA]
Cám ơn @LePhatHuy.
Để mình thử các này và phản hồi lại liền.
Thanks.
 
Upvote 0
Cám ơn @Maika8008
Để mình gởi file mẫu nhờ mọi người xem giúp nguyên nhân
Trong link để 2 file excel (1 rawdata từ hệ thống với tên Sheet1 và 1 file đã đổi tên sheet là Data) + 1 file access để import data.
Rất cám ơn mọi người.
Link file
Dùng file test.xlsm bị báo lỗi bảng dữ liệu của sheet1 đó không đúng định dạng. Khi mở file lên, cho phép chỉnh sửa, rồi bấm Save - đóng lại thì không báo lỗi nữa.
1698373450910.png

Điều này thì bài #8 đã có nói tới rồi nhưng bạn không thử làm theo.
 
Upvote 0
Lâu quá tôi không dùng Access, nhưng trước kia tôi import table from Excel file (dữ liệu chuẩn và chỉ 1 sheet), only connection hoặc new table đều được và đơn giản. Đâu cần macro với SQL, connection, và recordset.
 
Upvote 0
Dùng file test.xlsm bị báo lỗi bảng dữ liệu của sheet1 đó không đúng định dạng. Khi mở file lên, cho phép chỉnh sửa, rồi bấm Save - đóng lại thì không báo lỗi nữa.
View attachment 296117

Điều này thì bài #8 đã có nói tới rồi nhưng bạn không thử làm theo.
Sao mà trong máy cả 2 nó thể hiện là Microsoft Excel Worksheet(.xlsx) nhỉ ?
Như Maika8008 thì file Test đuôi .xlsm
1698376605656.png
Vậy để sửa lại thì phải chỉnh như #8 mà bạ HeSanbi hướng dẫn ở trên để test lại.
Cám ơn rất nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom