Truy vấn dữ liệu theo sheet Index

Liên hệ QC

tranbinhan0612

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
27/7/19
Bài viết
26
Được thích
15
Chào cộng đồng.

Trong VBA có thể tham chiếu tên sheet theo 3 cách:

1. Tên sheet: Sheets("Sheet_name").Select
2. Thứ tự sheet: Sheets(1).Select
3. Sheet code: sheet_code.Select

Sử dụng ADO để truy vấn SQL có thể truy vấn dữ liệu tập tin Excel được theo cấu trúc: SELECT * FROM [Sheet_name$]

Xin tham vấn cộng đồng chuyên gia bằng cách trực tiếp hoặc gián tiếp có thể mở rộng cách truy vấn theo dạng tham chiếu 2 và 3 được không?

Cảm ơn
 
Dùng index rất nguy hiểm vì chỉ cần nhảy đi chỗ khác là không biết đâu ra mà lần. Vậy nên các kỹ sư đã đau đầu quy định dùng theo tên cho chắc ăn.
 
Dùng index rất nguy hiểm vì chỉ cần nhảy đi chỗ khác là không biết đâu ra mà lần. Vậy nên các kỹ sư đã đau đầu quy định dùng theo tên cho chắc ăn.
Cần phải lấy thông tin từ file có duy nhất một sheet được xuất ra hàng ngày từ phần mềm. Ngặt nỗi mỗi ngày nó ra một tên sheet khác nhau ngẫu nhiên nên không lấy được tự động. Có gì đâu mà nguy hiểm, có nhiều lựa chọn, tùy tình huống chọn cách phù hợp mà.
 
Vậy mình nên chuyển cái vừa nêu lên bài đầu tiên ấy.
Nguyên lý chung khi đăng bài trợ giúp là mình nên nêu bài toán gốc xong xuôi, ngon lành. Kế tới mình kể câu chuyện riêng của mình, rằng ý tưởng của mình là như này này, mình đang làm như này mà chưa được này...
Với cái mình vừa nêu ấy, có bài giải lâu lắm rồi í. Mình tìm mấy bài lấy tên sheet từ file đóng gì đó, hay không cần mở file ấy...
 
Chào cộng đồng.

Trong VBA có thể tham chiếu tên sheet theo 3 cách:

1. Tên sheet: Sheets("Sheet_name").Select
2. Thứ tự sheet: Sheets(1).Select
3. Sheet code: sheet_code.Select

Sử dụng ADO để truy vấn SQL có thể truy vấn dữ liệu tập tin Excel được theo cấu trúc: SELECT * FROM [Sheet_name$]

Xin tham vấn cộng đồng chuyên gia bằng cách trực tiếp hoặc gián tiếp có thể mở rộng cách truy vấn theo dạng tham chiếu 2 và 3 được không?

Cảm ơn

Với dữ liệu trên cùng file thì bạn có thể thử như sau:
Mã:
Sub test()
    MsgBox Sheet1.Name
    MsgBox Sheets(1).Name
   
End Sub
Rồi nối chuỗi nó vào câu lệnh truy vấn của bạn.
Còn với dữ liệu khác file thì bạn có thể tham chiếu không đưa tên sheet vào, mà chỉ đưa địa chỉ vùng dữ liệu. Với cách này nó sẽ tự nhận dữ liệu ở sheet đầu tiên của file dữ liệu.
Còn muốn lấy sheet khác thì khó hơn nhiều.
 
Với dữ liệu trên cùng file thì bạn có thể thử như sau:
Mã:
Sub test()
    MsgBox Sheet1.Name
    MsgBox Sheets(1).Name
 
End Sub
Rồi nối chuỗi nó vào câu lệnh truy vấn của bạn.
Còn với dữ liệu khác file thì bạn có thể tham chiếu không đưa tên sheet vào, mà chỉ đưa địa chỉ vùng dữ liệu. Với cách này nó sẽ tự nhận dữ liệu ở sheet đầu tiên của file dữ liệu.
Còn muốn lấy sheet khác thì khó hơn nhiều.
Chắc là không có cách trực tiếp, phải dùng gián tiếp thế này.
Cảm ơn chuyên gia
Bài đã được tự động gộp:

Chắc là không có cách trực tiếp, phải dùng gián tiếp thế này.
Cảm ơn chuyên gia
Cách này không được bác ah. Cách này chỉ được nếu truy vấn dữ liệu cùng trong file, còn nếu khác file thì không được vì lúc đó nó hiểu Sheets(1).Name là tên sheet đầu tiên của file truy vấn, không phải tên sheet đầu tiên của file dữ liệu.
 
Lần chỉnh sửa cuối:
Chắc là không có cách trực tiếp, phải dùng gián tiếp thế này.
Gán ghép là sao bạn? Chính xác là bạn phải đưa cái tên sheet, tên bảng hoặc vùng dữ liệu vào câu lệnh truy vấn.
Cách này không được bác ah. Cách này chỉ được nếu truy vấn dữ liệu cùng trong file, còn nếu khác file thì không được vì lúc đó nó hiểu Sheets(1).Name là tên sheet đầu tiên của file truy vấn, không phải tên sheet đầu tiên của file dữ liệu.
Tôi đã nói rõ ở trên. Bạn muốn truy vấn dữ liệu ở sheet đầu tiên của bất kỳ 1 file nào khác thì bạn không đưa tên sheet vào mà chỉ đưa vùng dữ liệu.
 
Gán ghép là sao bạn? Chính xác là bạn phải đưa cái tên sheet, tên bảng hoặc vùng dữ liệu vào câu lệnh truy vấn.

Tôi đã nói rõ ở trên. Bạn muốn truy vấn dữ liệu ở sheet đầu tiên của bất kỳ 1 file nào khác thì bạn không đưa tên sheet vào mà chỉ đưa vùng dữ liệu.
Vùng dữ liệu là gì hả bạn. Là name_range phải không. Bài toán giả định cần giải quyết là không có defined_name_range.
 
Vùng dữ liệu là gì hả bạn. Là name_range phải không. Bài toán giả định cần giải quyết là không có defined_name_range.
Không phải name nha bạn, tôi đã nói rõ là vùng dữ liệu thôi mà.
Ví dụ tôi lấy hết dữ liệu từ vùng A1 : D100 ở sheet đầu tiên của file nào đó, không quan tâm file đó có bao nhiêu sheet và sheet đó tên gì thì tôi viết như sau:

Mã:
select * from [A1:D100]
 
Awesome, đúng là câu trả lời đang tìm. Cảm ơn bạn lắm!
 
Không phải name nha bạn, tôi đã nói rõ là vùng dữ liệu thôi mà.
Ví dụ tôi lấy hết dữ liệu từ vùng A1 : D100 ở sheet đầu tiên của file nào đó, không quan tâm file đó có bao nhiêu sheet và sheet đó tên gì thì tôi viết như sau:

Mã:
select * from [A1:D100]
Mặc định câu này nó chỉ lấy vùng đó của sheet đầu tiên thôi hả anh HLMT?
 
Web KT
Back
Top Bottom