Các bác cho em hỏi. Em muốn đổi tên của các sheet ở các file khác nhau thành 1 tên thôi mà không cần mở thủ công từng file. VD file 1,2,3 đều thay tên sheet1 là Bài 1 hết thì có cách nào thay hàng loạt không? các bác chỉ giáo cho em với.
Có, mà bạn biết chút gì về lập trình VBA không?Các bác cho em hỏi. Em muốn đổi tên của các sheet ở các file khác nhau thành 1 tên thôi mà không cần mở thủ công từng file. VD file 1,2,3 đều thay tên sheet1 là Bài 1 hết thì có cách nào thay hàng loạt không? các bác chỉ giáo cho em với.
Const sheet_mot = "Bai 1"
Sub Doi_Ten()
Dim Path As String, Filename As String
Path = ThisWorkbook.Path
Filename = Dir(Path & "\" & "*.xls*")
Application.ScreenUpdating = False
Do While Filename <> ""
If Filename <> ThisWorkbook.Name Then
Workbooks.Open Filename:=Path & "\" & Filename
Workbooks(Filename).Sheets("Sheet1").Name = sheet_mot
Workbooks(Filename).Close True
End If
Filename = Dir()
Loop
Application.ScreenUpdating = True
End Sub
End Sub
em không biết nhiều về VBA. em cám ơn bác nhé! để em thử tìm hiểu chạy code xem saoMới viết chay chưa thử trên file,Bạn tự lập cái dữ liệu ảo thử code rồi hẵng dùng nha.đừng dùng dữ liệu thật để testMã:Const sheet_mot = "Bai 1" Sub Doi_Ten() Dim Path As String, Filename As String Path = ThisWorkbook.Path Filename = Dir(Path & "\" & "*.xls*") Application.ScreenUpdating = False Do While Filename <> "" If Filename <> ThisWorkbook.Name Then Workbooks.Open Filename:=Path & "\" & Filename Workbooks(Filename).Sheets("Sheet1").Name = sheet_mot Workbooks(Filename).Close True End If Filename = Dir() Loop Application.ScreenUpdating = True End Sub End Sub
Em biết ít lắm nên không viết được code. Bác có code hướng dẫn em vớiCó, mà bạn biết chút gì về lập trình VBA không?
Hình như code này có hạn chế là bị lỗi với folder có tên có dấu thì phải?Mới viết chay chưa thử trên file,Bạn tự lập cái dữ liệu ảo thử code rồi hẵng dùng nha.đừng dùng dữ liệu thật để testMã:Const sheet_mot = "Bai 1" Sub Doi_Ten() Dim Path As String, Filename As String Path = ThisWorkbook.Path Filename = Dir(Path & "\" & "*.xls*") Application.ScreenUpdating = False Do While Filename <> "" If Filename <> ThisWorkbook.Name Then Workbooks.Open Filename:=Path & "\" & Filename Workbooks(Filename).Sheets("Sheet1").Name = sheet_mot Workbooks(Filename).Close True End If Filename = Dir() Loop Application.ScreenUpdating = True End Sub End Sub
Với file tên tiếng việt có dấu bạn tham khảo dùng Scripting.FileSystemObject nhaHình như code này có hạn chế là bị lỗi với folder có tên có dấu thì phải?
View attachment 251417
View attachment 251418
View attachment 251419
em bỏ cái Dir đi xem thay vào đó là path của nóHình như code này có hạn chế là bị lỗi với folder có tên có dấu thì phải?
View attachment 251417
View attachment 251418
View attachment 251419
Mình sửa thử:Với file tên tiếng việt có dấu bạn tham khảo dùng Scripting.FileSystemObject nha
Const sheet_mot = "Bai 1"
Public Sub qaz()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ChonO As Object, ChonF As Object, pFile, Path
Dim fName As Object, Data, Wb As Workbook, Sh As Worksheet
pFile = ActiveWorkbook.Name
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Chon Folder"
.Show
If .SelectedItems.Count = 0 Then Exit Sub
Path = .SelectedItems(1) & "\"
End With
Set ChonO = CreateObject("scripting.filesystemobject")
Set ChonF = ChonO.GetFolder(Path)
For Each fName In ChonF.Files
If InStr(1, fName.Name, pFile) <= 0 Then
Set Wb = Workbooks.Open(fName.Path)
Set Sh = Wb.Sheets(1)
Sh.Name = sheet_mot
Workbooks(fName.Name).Close True
End If
Next fName
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Theo mình thường thì chỗ if trong for each đó phải thêm điều kiện khác file temp nữa, và để chặt chẽ hơn thì nên thêm điều kiện bỉ qua những file không phải xls*Mình sửa thử:
Mã:Const sheet_mot = "Bai 1" Public Sub qaz() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim ChonO As Object, ChonF As Object, pFile, Path Dim fName As Object, Data, Wb As Workbook, Sh As Worksheet pFile = ActiveWorkbook.Name With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Chon Folder" .Show If .SelectedItems.Count = 0 Then Exit Sub Path = .SelectedItems(1) & "\" End With Set ChonO = CreateObject("scripting.filesystemobject") Set ChonF = ChonO.GetFolder(Path) For Each fName In ChonF.Files If InStr(1, fName.Name, pFile) <= 0 Then Set Wb = Workbooks.Open(fName.Path) Set Sh = Wb.Sheets(1) Sh.Name = sheet_mot Workbooks(fName.Name).Close True End If Next fName Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
Nhờ bạn và mọi người sửa thêm giúp để mình tham khảo thêm nhé!
Đôi lúc công việc yêu cầu đổi tên sheet của nhiều file riêng thành 1 tên chung lúc đấy mở từng file mất thời gian mà chỉ sửa mỗi tên của sheet thôi bác ạTôi chả hiểu tại sao nhiều người thích làm việc kiểu "sửa file mà không cần mở file".
Bạn có đưa chùm chìa khoá cho người may màn và bảo y "Tôi bận đi chơi, ông đến nhà tôi, mở khoá từng phòng và mắc những cái màn lên"
Sửa file mà không xem thì biết lỡ code sai, hay file có cái gì đặc biệt nó quậy cái gì ở trong đó?
thay vì sử dụng Workbooks.Open thì đổi qua ADODB đi xem saoĐôi lúc công việc yêu cầu đổi tên sheet của nhiều file riêng thành 1 tên chung lúc đấy mở từng file mất thời gian mà chỉ sửa mỗi tên của sheet thôi bác ạ
Trong code phần này nó lấy tên sheets làm tên file,nếu đã là tách sheets hàng loạt ra file mới thì bạn nên tạo một danh sách tên các sheets ra,sau đó là cứ một vòng lặp thì biến biến thay đổi và tên file sẽ thay đổi.đại loại như danh sách tên file ở sheet1 ô A1 trở đish.Name
For Each sh In Worksheets
sh.Copy
i = i + 1
Ten = thisworbook.Sheet1.Range("A" & i).Value
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Ten, 51
ActiveWorkbook.Close
Next
Ý em là khi ra file mới tên file vẫn là tên trong sheet cũ nhưng tên sheet trong các file mới thay đổi ý bác ạTrong code phần này nó lấy tên sheets làm tên file,nếu đã là tách sheets hàng loạt ra file mới thì bạn nên tạo một danh sách tên các sheets ra,sau đó là cứ một vòng lặp thì biến biến thay đổi và tên file sẽ thay đổi.đại loại như danh sách tên file ở sheet1 ô A1 trở đi
Mã:For Each sh In Worksheets sh.Copy i = i + 1 Ten = thisworbook.Sheet1.Range("A" & i).Value ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Ten, 51 ActiveWorkbook.Close Next
Vậy thì cái file mới đang mở đó chính là cái file đang Active .Ý em là khi ra file mới tên file vẫn là tên trong sheet cũ nhưng tên sheet trong các file mới thay đổi ý bác ạ
With ActiveWorkbook
.ActiveSheet.Name = Ten
End With
cảm ơn bác nhé. em sẽ thử xem sao.Vậy thì cái file mới đang mở đó chính là cái file đang Active .
Bạn hình dung Thisworkbook là cái file bạn đặt code.còn sau khi mà copy xong lưu sang 1 file mới nhưng chưa đóng file đó tức là trước cái bướcMã:With ActiveWorkbook .ActiveSheet.Name = Ten End With
ActiveWorkbook.Close
thì lúc đó file đang mở là activeworkbook . sau đó bạn tiến hành đổi tên sheets theo danh sách đã định rồi mới tiến hành dòng lệnh ActiveWorkbook.save => ActiveWorkbook.Close