lấy tên các sheet trong một workbook (1 người xem)

  • Thread starter Thread starter rosy84
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

rosy84

Thành viên hoạt động
Tham gia
15/3/09
Bài viết
170
Được thích
38
Các bác có cách nào lấy tên các sheet trong một workbook không? bằng macro ấy, em đang cần nhưng chưa viết được. Mong các bác giúp đỡ. thanks!
 
Bạn xem ví dụ nhé

PHP:
Sub test()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Sheets
MsgBox "Name: -" & sh.Name & "====CodeName:  -" & sh.CodeName
Next
End Sub

Lấy theo thứ tự từ trái sang phải:

PHP:
Sub test()
For i = 1 To Sheets.Count
MsgBox Sheets.Item(i).Name
Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
nhưng em muốn lấy tên sheet sau đó đổi tên nó cơ. Bác có thể giúp em được không? thanks1
 
Upvote 0
Có lẽ trả lời bạn ở đây rồi
 
Upvote 0
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)
 
Upvote 0
Đối với 1 file đang đóng thì mình chưa làm được việc này
 
Upvote 0
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)
Thì dùng ADO, đại khái thế này:
- Đầu tiên vào menu Tools\References và check vào các mục
Microsoft ADO Ext....
Microsoft ActiveX Data Objects....
- Tiếp theo chạy code này:
PHP:
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
Từ đây có thể cải tiến code thành 1 Function hay gì gì đó tùy thích
Tham khảo thêm bài này:
http://www.giaiphapexcel.com/forum/showthread.php?t=25407
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
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)
Chỉ có cách là dùng VBA mở file đó ra, lấy tên sheet xong rồi đóng file đó lại,
Bạn dùng code sau nhé:

Mã:
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
 
Upvote 0
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
 
Upvote 0
Cá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.
 
Upvote 0
Cá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.
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 SheetNames
Nói tóm lại: Dù file nguồn có đang mở hay đóng, dù file nguồn có bị lổi gì đó thì phương pháp ADO cũng "trị" được hết (đương nhiên nó vẫn có những nhược điểm riêng)
 
Upvote 0
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.
 
Upvote 0
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.

Bạn xem bài #30 thử nhé
 
Upvote 0
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ỉ?
 
Upvote 0
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ỉ?

Tốc độ có khác đó bạn, ADO, DAO sẽ lấy nhanh hơn.
 
Upvote 0

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

Back
Top Bottom