Đổi tên sheet từ nhiều file khác nhau

Liên hệ QC

pgdquandd

Thành viên mới
Tham gia
10/12/20
Bài viết
6
Được thích
0
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á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?
 
Mã:
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
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 để test
 
Lần chỉnh sửa cuối:
Mã:
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
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 để test
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 sao
Bài đã được tự động gộp:

Có, mà bạn biết chút gì về lập trình VBA không?
Em biết ít lắm nên không viết được code. Bác có code hướng dẫn em với
 
Lần chỉnh sửa cuối:
Mã:
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
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 để test
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?

1608200071276.png

1608200088360.png

1608200108766.png
 
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 đó?
 
Với file tên tiếng việt có dấu bạn tham khảo dùng Scripting.FileSystemObject nha
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é!
 
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é!
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*
 
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 đó?
Đô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 ạ
 
Đô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 ạ
thay vì sử dụng Workbooks.Open thì đổi qua ADODB đi xem sao
Trên GPE code code đại ý như thế tìm đi xong vọc vạch xem nó như thế nào ?!
 
Các bác giúp em thêm phần này với ạ. em thấy có 1 đoạn code trên mạng tách hàng loạt sheet thành file riêng lẻ. Nó tách các sheet thành cách file riêng và tên file là tên trong sheet. Em muốn tên sheet trong các file tách riêng ra đổi là tên khác. Ví dụ tên sheet trong file tách ra là "Hang1" thì phải sửa code thế nào ạ? e đang mầy mò VBA mong các bác giúp em với.
code đây ạ
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim sh As Worksheet
For Each sh In Worksheets
sh.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & sh.Name, 51
ActiveWorkbook.Close
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
 
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
 
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
Ý 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 ạ
 
Ý 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 ạ
Vậy thì cái file mới đang mở đó chính là cái file đang Active .
Mã:
With ActiveWorkbook
        .ActiveSheet.Name = Ten
    End With
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ước
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
 
Vậy thì cái file mới đang mở đó chính là cái file đang Active .
Mã:
With ActiveWorkbook
        .ActiveSheet.Name = Ten
    End With
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ước
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
cảm ơn bác nhé. em sẽ thử xem sao.
 
Web KT
Back
Top Bottom