Sub test()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Sheets
MsgBox "Name: -" & sh.Name & "====CodeName: -" & sh.CodeName
Next
End Sub
Sub test()
For i = 1 To Sheets.Count
MsgBox Sheets.Item(i).Name
Next
End Sub
Thì dùng ADO, đại khái thế này:Với cách trên thì Workbook đó phải đang mở.
Vậy có cách nào để lấy tên tất cả các Sheet của 1 Workbook đang đóng không? (bằng VBA)
Sub Test()
Dim objConn As ADODB.Connection, objCat As ADOX.Catalog, tbl As ADOX.Table
Dim Temp As String, PathFile As String
On Error Resume Next
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False: .Show: PathFile = .SelectedItems(1)
End With
Set objConn = New ADODB.Connection
objConn.Open "Provider=MSDASQL.1;Data Source=Excel Files; Initial Catalog=" & PathFile
Set objCat = New ADOX.Catalog
Set objCat.ActiveConnection = objConn
For Each tbl In objCat.Tables
If Right(tbl.Name, 1) = "$" Or Right(tbl.Name, 2) = "$'" Then
Temp = Temp & Chr(10) & Replace(Replace(tbl.Name, "$", ""), "'", "")
End If
Next tbl
MsgBox Temp
objConn.Close
End Sub
Chỉ có cách là dùng VBA mở file đó ra, lấy tên sheet xong rồi đóng file đó lại,Với cách trên thì Workbook đó phải đang mở.
Vậy có cách nào để lấy tên tất cả các Sheet của 1 Workbook đang đóng không? (bằng VBA)
Sub LayTenSheet()
[COLOR=darkgreen]'Duong dan den file[/COLOR]
Workbooks.Open Filename:="[COLOR=blue]C:\Users\Le Phat Dom\Desktop\Test.xls"[/COLOR]
Dim ws As Worksheet
Dim i As Integer
[COLOR=green]'Chon sheet1 de dua danh sach ten sheet vao[/COLOR]
With ThisWorkbook.Worksheets("Sheet1")
.Range("A:A").ClearContents
For Each ws In ActiveWorkbook.Worksheets
i = i + 1
.Range("A" & i) = ws.Name
Next ws
End With
[COLOR=green]'Dong file lay ten sheet[/COLOR]
Workbooks("Test").Close False
End Sub
Sub Test()
Dim objConn, objCat, tbl, Temp As String, PathFile As String
On Error Resume Next
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False: .Show: PathFile = .SelectedItems(1)
End With
Set objConn = CreateObject("ADODB.Connection")
objConn.Open "Provider=MSDASQL.1;Data Source=Excel Files; Initial Catalog=" & PathFile
Set objCat = CreateObject("ADOX.Catalog")
Set objCat.ActiveConnection = objConn
For Each tbl In objCat.Tables
If Right(tbl.Name, 1) = "$" Or Right(tbl.Name, 2) = "$'" Then
Temp = Temp & Chr(10) & Replace(Replace(tbl.Name, "$", ""), "'", "")
End If
Next tbl
MsgBox Temp
objConn.Close
End Sub
Anh ơi, cách nào thì cũng phải MỞ (bằng hình thức nào đó)... nhưng ADO có 1 lợi thế tuyệt vời là nó có thể lấy được tên sheet ngay cả khi file nguồn đang bị lổi ---> Tức file nguồn này không thể mở bằng hình thức Workbooks.Open được ---> Nó báo lổi ngay thì lấy đâu mà Get SheetNamesCác biện pháp của các bạn đáng lưu ý để tham khảo khi cần thiết. Nhưng có 1 điều mình thấy câu hỏi của Topic là lấy Danh sách sheet của 1 file Excel đang đóng thì mình thấy vẫn chưa thoả mãn. Tất cả các biện pháp đều phải mở file dưới các hình thức chứ thật khó (Theo mình thì không thể) đối với 1 file hoàn toàn đóng.
Cảm ơn thầy NDU nhiều. Trong ví dụ của thầy, nếu e thay PathFile thành một chuổi cố định (Đường dẫn này đã tồn tại) và không thông qua hộp thoại chọn file thì lại báo lỗi thầy nhỉ. Điểm khác nhau giữa việc xuất hiện hộp thoại và không xuất hiện hộp thoại là gì? Có cách nào mình thực hiện mà không thông qua hộp thoại chọn file không thầy nhỉ? Mong thầy và mọi người chỉ giúp em.Cách khác dùng CreatObject, khỏi cần Add References
PHP:Sub Test() Dim objConn, objCat, tbl, Temp As String, PathFile As String On Error Resume Next With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = False: .Show: PathFile = .SelectedItems(1) End With Set objConn = CreateObject("ADODB.Connection") objConn.Open "Provider=MSDASQL.1;Data Source=Excel Files; Initial Catalog=" & PathFile Set objCat = CreateObject("ADOX.Catalog") Set objCat.ActiveConnection = objConn For Each tbl In objCat.Tables If Right(tbl.Name, 1) = "$" Or Right(tbl.Name, 2) = "$'" Then Temp = Temp & Chr(10) & Replace(Replace(tbl.Name, "$", ""), "'", "") End If Next tbl MsgBox Temp objConn.Close End Sub
Cảm ơn thầy NDU nhiều. Trong ví dụ của thầy, nếu e thay PathFile thành một chuổi cố định (Đường dẫn này đã tồn tại) và không thông qua hộp thoại chọn file thì lại báo lỗi thầy nhỉ. Điểm khác nhau giữa việc xuất hiện hộp thoại và không xuất hiện hộp thoại là gì? Có cách nào mình thực hiện mà không thông qua hộp thoại chọn file không thầy nhỉ? Mong thầy và mọi người chỉ giúp em.
Cảm ơn thầy nhiều.
Cảmo ơn anh Hai Lúa miền Tây, tại bài #30 đúng ý muốn của em rồi, cho em hỏi, nếu mình dùng ADO thì em thấy về tốc độ cũng tương đương như mình mở file đó ra phải không anh nhỉ?