Giả sử tôi có 1 file gồm 4 sheet có tên lần lượt như sau:
S A.1.1
S A.1#1
S A#1.1
S A#1#1
Xin hỏi các anh chị và các bạn có cách nào dùng ADO/DAO lấy dữ liệu từ 1 sheet bất kỳ trong file đó không.
Sub TestExcel()
Dim cn As Object, rst As Object
Set cn = CreateObject("ADODB.Connection")
cn.Open ("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};dbq=" & ThisWorkbook.FullName & ";")
Set rst = cn.Execute("select * from [S A.1#1$]")
Sheet5.[A2].CopyFromRecordset rst
End Sub
Bạn xem code sau thử nhé:
Mã:Sub TableName() Dim Cn As Object, rsTables As Object, Arr() As Variant Set Cn = CreateObject("ADODB.Connection") Cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.FullName & _ ";Extended Properties=""Excel 8.0"";") Set rsTables = Cn.OpenSchema(20) Arr = rsTables.GetRows(, , "TABLE_NAME") ActiveCell.Resize(UBound(Arr, 2) - LBound(Arr, 2) + 1, 1).Value = Application.Transpose(Arr) End Sub
Làm lộn, đã chỉnh lại code theo yêu cầuem chạy code ra 4 sheet giống nhau tên là 'S A#1#1$'
Em chạy code thấy lỗi dòng này:Bạn xem code sau thử nhé:
Mã:Sub TableName() Dim Cn As Object, rsTables As Object, Arr() As Variant Set Cn = CreateObject("ADODB.Connection") Cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.FullName & _ ";Extended Properties=""Excel 8.0"";") Set rsTables = Cn.OpenSchema(20) Arr = rsTables.GetRows(, , "TABLE_NAME") ActiveCell.Resize(UBound(Arr, 2) - LBound(Arr, 2) + 1, 1).Value = Application.Transpose(Arr) End Sub
Arr = rsTables.GetRows(, , "TABLE_NAME")
Xin lỗi, đã chỉnh lại code trên ở bài 2Em chạy code thấy lỗi dòng này:
Nhưng hình như anh hiểu nhầm ý em. Em muốn lấy dữ liệu của 1 sheet chứ không phải muốn lấy tên sheet (mà tên sheet lấy ra cũng không đúng luôn).Mã:Arr = rsTables.GetRows(, , "TABLE_NAME")
Sau khi anh sửa lại. Nội dung code là lấy dữ liệu sheet S A.1#1 nhưng kết quả là dữ liệu của sheet S A.1.1Xin lỗi, đã chỉnh lại code trên ở bài 2
Làm lộn, đã chỉnh lại code theo yêu cầu
Vấn đề chính là ở chỗ đó đó anh. Trường hợp em nêu ra hoàn toàn có thể xảy ra. Em muốn hỏi trong trường hợp đó có hướng nào để giải quyết không?Dấu chấm (.) thì nó xem như (#) còn dấu (#) thì bình thường. Đang chờ trả lời từ Thắng.
View attachment 148033
Không có cách nào ngoại trừ điều chỉnh tên sheet hoặc đặt Name.Vấn đề chính là ở chỗ đó đó anh. Trường hợp em nêu ra hoàn toàn có thể xảy ra. Em muốn hỏi trong trường hợp đó có hướng nào để giải quyết không?
Nếu vậy thì kế hoạch của em phá sản rồi. Em đang muốn lấy dữ liệu mà không phải mở file (bằng excel)Không có cách nào ngoại trừ điều chỉnh tên sheet hoặc đặt Name.
Có thể có cách nhưng mình chưa tìm ra... Thắng nên tìm giải pháp khác thay vì tìm kiếm câu trả lời nhé.Nếu vậy thì kế hoạch của em phá sản rồi. Em đang muốn lấy dữ liệu mà không phải mở file (bằng excel)
Có thể có cách nhưng mình chưa tìm ra... Thắng nên tìm giải pháp khác thay vì tìm kiếm câu trả lời nhé.
Hình trong bài #9 đã thấy rõ + code liệt kê tên sheet mà bạn doveandrose đã test là chỉ lấy được 4 tên sheet nhưng với tên giống nhau. Khỏi tìm nữa Thắng ơi.Em tìm nát rồi em mới hỏi đó anh.
lấy dữ liệu mà không cần mở file đối với file xlsx thì còn ít nhất 2 cách nữa mà không dùng ADO mà bạn . Nhưng tôi tò mò muốn nhìn thấy file thật ra saoNếu vậy thì kế hoạch của em phá sản rồi. Em đang muốn lấy dữ liệu mà không phải mở file (bằng excel)
Thật ra thì không có file thật. Tôi đang muốn lấy tất cả dữ liệu từ một file Excel bất kỳ mà không mở file (bằng Excel). Trường hợp tôi đưa ra là lo xa mà thôi. Không biết bạn có cao kiến gì không?lấy dữ liệu mà không cần mở file đối với file xlsx thì còn ít nhất 2 cách nữa mà không dùng ADO mà bạn . Nhưng tôi tò mò muốn nhìn thấy file thật ra sao
ẹc viết #16 rồi mới nhớ topic này toàn cao thủ . tôi làm gì có cao kiến nào hơn được . mấy điều tôi nói chắc các bạn biết hết rồiThật ra thì không có file thật. Tôi đang muốn lấy tất cả dữ liệu từ một file Excel bất kỳ mà không mở file (bằng Excel). Trường hợp tôi đưa ra là lo xa mà thôi. Không biết bạn có cao kiến gì không?
Trong Access anh Bill không cho đặt tên bảng có dấu chấm, truy nhiên trong name thì ok.Thật ra thì không có file thật. Tôi đang muốn lấy tất cả dữ liệu từ một file Excel bất kỳ mà không mở file (bằng Excel). Trường hợp tôi đưa ra là lo xa mà thôi. Không biết bạn có cao kiến gì không?
Trong Access anh Bill không cho đặt tên bảng có dấu chấm, truy nhiên trong name thì ok.
Trong MySQL thì cũng không cho
Tuy nhiên trong SQLServer thì đồng ý
Có thể có cách mà ta chưa biết