ongke0711
Thành viên gắn bó
- Tham gia
- 7/9/06
- Bài viết
- 2,224
- Được thích
- 2,942
- Giới tính
- Nam
Cám ơn bạn, mời bạn cho kết quả nhé.
hehe..Toang rồi. Vẫn bị vòng lặp từ Collection -> Array. Để ngâm cứu tiếp.
Cám ơn bạn, mời bạn cho kết quả nhé.
Ra lẹ thế? Đang chờ bài giải của em.Rồi em mò ra được rồi
Sub GetFiled_Thuyyeu99()
Dim SheetName As String
Dim cn As Object, rs As Object, arr() As Variant
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
SheetName = InputBox(prompt:="Nhap ten Sheet", Title:="Lay Filed tren Excel", Default:="Sheet1")
If StrPtr(SheetName) = 0 Then Exit Sub
If SheetName = NullString Then Exit Sub
SheetName = SheetName & "$"
cn.Open _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"data source=" & ThisWorkbook.FullName & ";" & _
"extended properties=excel 12.0 macro;"
Set rs = cn.OpenSchema(4, Array(Empty, Empty, SheetName))
arr = rs.GetRows(, , "COLUMN_NAME")
ActiveCell.Resize(UBound(arr, 2) - LBound(arr, 2) + 1, 1).Value = Application.Transpose(arr)
rs.Close
cn.Close
End Sub
Chính xác là chỗ đó, đáp án như sau:Mã:Sub GetFiled_Thuyyeu99() Dim SheetName As String Dim cn As Object, rs As Object, arr() As Variant Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") SheetName = InputBox(prompt:="Nhap ten Sheet", Title:="Lay Filed tren Excel", Default:="Sheet1") If StrPtr(SheetName) = 0 Then Exit Sub If SheetName = NullString Then Exit Sub SheetName = SheetName & "$" cn.Open _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "data source=" & ThisWorkbook.FullName & ";" & _ "extended properties=excel 12.0 macro;" Set rs = cn.OpenSchema(4, Array(Empty, Empty, SheetName)) arr = rs.GetRows(, , "COLUMN_NAME") ActiveCell.Resize(UBound(arr, 2) - LBound(arr, 2) + 1, 1).Value = Application.Transpose(arr) rs.Close cn.Close End Sub
Sub ColumnsName_HLMT()
Dim Arr() As Variant
With CreateObject("ADODB.Connection")
.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ThisWorkbook.FullName + ";Extended Properties=""Excel 12.0"";")
Arr = .OpenSchema(4, Array(Empty, Empty, "Sheet2$", Empty)).getrows(, , "COLUMN_NAME")
End With
ActiveCell.Resize(UBound(Arr, 2) + 1, 1).Value = Application.Transpose(Arr)
End Sub
Lâu quá không trở lại đề tài này, hôm nay mình xin đố các bạn là làm sao lấy được danh sách tên cột của một bảng cho trước mà không dùng vòng lặp?
Trong file mẫu tôi gửi có 3 sheets (Sheet1, Sheet2, Sheet3), và 1 sheet KetQua. Khi tôi muốn lấy tên cột của sheet nào thì nó lấy kết quả tên cột của sheet ấy.
View attachment 241663
Anh hơi đi xa quá rồiKhông xài chữ to mà xài Application.Transpose
Mạnh đoán là hàm đó Bill cũng chạy 2 dòng For đấy
arr = rs.GetRows(, , "COLUMN_NAME")
quậy đi là viết SQL OK đó ... lâu nay Mạnh đang xài nó ... biết vài tháng nay rồi từ trước khi Ông gì hỏi trên GPE lấy SheetName đóAnh cũng dùng ADO OpenSchema nhưng lại không biết chuyển thành array như thế nào... Ai ngờ cái getRows có các tham số như vậy, đúng là chưa khai thác hết nó... hehe.
Anh cũng dùng ADO OpenSchema nhưng lại không biết chuyển thành array như thế nào... Ai ngờ cái getRows có các tham số như vậy, đúng là chưa khai thác hết nó... hehe.
Thật ra cái vụ tên sheet và tên cột đã được HLMT đố vui hồi năm 2015, tuy nhiên nó nằm ở đề tài khác, không nằm ở đây nên muốn "đố lại" cho "đủ bộ"quậy đi là viết SQL OK đó ... lâu nay Mạnh đang xài nó ... biết vài tháng nay rồi từ trước khi Ông gì hỏi trên GPE lấy SheetName đó
bài số 4 link sau
View attachment 241689Lấy sheet của file trong folder
Nhờ anh em trên Forums xem và giúp. Hiện đang bị lỗi - Hiện tên sheets nhưng chưa lấy được nội dung - Cùng là file *.xls trong 1 folder: file thì hiện tên các sheets, file thì lại khôngwww.giaiphapexcel.com
Trên GPE này có rất nhiều code rất chi là hay ... quan trọng ai đó có biết vận dụng và kết hợp nó lại hay ko đó thôi ...!!!???Thật ra cái vụ tên sheet và tên cột đã được HLMT đố vui hồi năm 2015, tuy nhiên nó nằm ở đề tài khác, không nằm ở đây nên muốn "đố lại" cho "đủ bộ"
Tên sheet
View attachment 241716
Tên cột
View attachment 241717
Đố vui về ADO, DAO - T3/15
Lâu quá không khởi động chủ đề này, hôm nay xin đưa ra câu đố như sau: Làm thế nào ta có thể liệt kê tất cả tên sheet, name, vùng in... mà không dùng vòng lặp?www.giaiphapexcel.com
sSQL = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES " & _
"WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='" & Me.cboDatabaseName & "'"
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG
Nó nằm trong cái sys.Tables. Nếu dùng câu lệnh ngắn hơn để lấy danh sách Table thì có thể vào đây lấy.Thấy mục này đang hay ... Tiếp theo Mạnh đố chứ ko có hỏi nhe
Câu lệnh SQL sau quá dài vậy có câu nào khác thay thế nó mà mục đích y trang vậy mà ngắn nhất hay ko ???
Nếu lấy phần sau rồi đếm nó thì có 98 ký tự ( Len(SQL) )Mã:sSQL = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES " & _ "WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='" & Me.cboDatabaseName & "'"
Với câu SQL trên Mạnh viết lại chỉ có 36 ký tựMã:SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG
Xin mời góp vui 1 tí
Select name from sys.Tables
chính xác là nó và cái này chạy trên VBA + VB6 + Delphi Ok đóNó nằm trong cái sys.Tables. Nếu dùng câu lệnh ngắn hơn để lấy danh sách Table thì có thể vào đây lấy.
Mã:Select name from sys.Tables
Anh hơi vui tính, nó không những cho lấy được từ những cái trên mà còn hơn thế nữa. Vì sao thì ai cũng có thể hiểu.chạy trên VBA + VB6 + Delphi Ok đó
Vì ngày qua có hỏi thớt bên kia cái chuỗi đó sao trên Delphi nó Ứ có chạy ... mò diết tối qua mới biết...Anh hơi vui tính, nó không những cho lấy được từ những cái trên mà còn hơn thế nữa. Vì sao thì ai cũng có thể hiểu.
Vì ngày qua có hỏi thớt bên kia cái chuỗi đó sao trên Delphi nó Ứ có chạy ... mò diết tối qua mới biết...
vậy là cái chuỗi đó là ok nhất chạy chung cho tất cả đó
Đôi khi ngắn quá cũng không hay, ví dụ để trả về những cái Tables thì còn phải xử lý tiếp lằng nhằng sau đó. Tùy biến mà dùng, dài cũng có lợi thế của nó.Cách ngắn nữa: chạy "Exec sp_tables"
cái này là do Delphi mình khai báo nó chưa có hiễu hay là xài TADOConnection.Create(nil); mà cách khai báo khác nó mới hiểuVụ này ngộ à.
Cùng là câu lệnh truy vấn Table hệ thống của SQL Server mà có Table cho lấy dữ liệu, có Table không chạy được là sao nhỉ?
Bạn dùng SQL Server phiên bản bao nhiêu?
Mỗi Table hệ thống của SQL SV đều chứa những thông tin riêng của nó, tuỳ nhu cầu, tính tiện dụng mà sử dụng thôi.
Cách ngắn nữa: chạy "Exec sp_tables"