Dùng Macro để đổi định dạng file hàng loạt

Liên hệ QC

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
937
Được thích
571
Chào các anh chị

Em có đống dữ liệu dùng chung, được hình thành ngày qua ngày.
Mỗi ngày có khoảng 10-15 file được đặt trong 1 folder. Mỗi folder là 1 ngày lại được đặt trong 1 folder tháng. Tóm lại là mỗi tháng có khoảng 400 file trong 30 folder.
Các file hiện tại đều cùng cấu trúc và có đuôi .xlsb
Em muốn xóa macro khỏi các file đó để không ai kích hoạt lại chức năng của Macro trong nó. Em đang xóa macro bằng cách Save as ra .xlsx nhưng bằng cách hoàn toàn thủ công.
Mong các anh chị viết cho 1 đoạn code để chỉ 1 Click là các file được loại bỏ Macro (bằng cách Save as sang .xlsx)
Xin chân thành cảm ơn
 

File đính kèm

  • TaoMenuMacro4.xlsb
    10.2 KB · Đọc: 16
Upvote 0
Chổ màu đỏ thì code không thực hiện được nhé bạn, code chỉ thực hiện trên file không đặt password vba Project. Vậy mở file lên và save lại định dạng xlsx thì sửa code như sau:
Mã:
Sub DeleteAllCode()
On Error Resume Next
    Const ExcelExtension As String = "|xlsb|xlsm|"
    Dim Wb As Workbook
    Dim x As Integer
    Dim sFolder As String, iFile As Object, FullPath As String
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
    With CreateObject("Scripting.FileSystemObject")
        sFolder = .GetParentFolderName(ThisWorkbook.FullName)
        MkDir sFolder & "\GPE"
        For Each iFile In .GetFolder(sFolder).Files
            If InStr(ExcelExtension, "|" & .GetExtensionName(iFile.Path) & "|") > 0 Then
                If iFile.Path <> ThisWorkbook.FullName And Left(iFile.Name, 2) <> "~$" Then
                Set Wb = Workbooks.Open(sFolder & "\" & iFile.Name)
                    Wb.SaveAs Filename:=Left(sFolder & "\GPE\" & iFile.Name, Len(sFolder & "\GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkbook
                    Wb.Close False
                    Set Wb = Nothing
                End If
            End If
        Next
    End With
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True
    MsgBox "Da thuc hien xong", vbExclamation, "GPE!"
End Sub
Anh cho em hỏi code trên khi chạy thì nó tạo ra thư mục mới là GPE và nó lưu những file đã xóa code
Bây giờ em muốn những file đã xóa code vẫn lưu ở thư mục củ được không anh? Em cảm ơn!
 
Upvote 0
Anh cho em hỏi code trên khi chạy thì nó tạo ra thư mục mới là GPE và nó lưu những file đã xóa code
Bây giờ em muốn những file đã xóa code vẫn lưu ở thư mục củ được không anh? Em cảm ơn!
Thay dòng
Mã:
Wb.SaveAs Filename:=Left(sFolder & "\GPE\" & iFile.Name, Len(sFolder & "\GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkbook
thành
Mã:
Wb.SaveAs Filename:=Left(sFolder & "\" & iFile.Name, Len(sFolder & "\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkbook
 
Upvote 0
Thay dòng
Mã:
Wb.SaveAs Filename:=Left(sFolder & "\GPE\" & iFile.Name, Len(sFolder & "\GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkbook
thành
Mã:
Wb.SaveAs Filename:=Left(sFolder & "\" & iFile.Name, Len(sFolder & "\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkbook
Cảm ơn anh, bây giờ mình muốn nó xóa luôn File có code (trừ file chứa code
Sub DeleteAllCode() ) để chuyển file cho khách hàng đỡ lẫn lộn
 
Upvote 0
Cảm ơn anh, bây giờ mình muốn nó xóa luôn File có code (trừ file chứa code
Sub DeleteAllCode() ) để chuyển file cho khách hàng đỡ lẫn lộn
Thì như ban đầu cho lưu vào một thư mục có tên GPE xong gửi thư mục GPE đó đi là xong.
 
Upvote 0
Thì như ban đầu cho lưu vào một thư mục có tên GPE xong gửi thư mục GPE đó đi là xong.
Thường thư mục của em là ngay-tháng -năm, nên khi giở cho khách hàng thì người thực thi họ chỉ cần nhìn tên thư mục là họ chuyển File
Do đó nếu để vậy thì họ khó xác định được tên thư mục
Nếu được thì anh giúp em, còn phức tạp quá thì thôi anh ạ, em cảm ơn!
 
Upvote 0
Thường thư mục của em là ngay-tháng -năm, nên khi giở cho khách hàng thì người thực thi họ chỉ cần nhìn tên thư mục là họ chuyển File
Do đó nếu để vậy thì họ khó xác định được tên thư mục
Nếu được thì anh giúp em, còn phức tạp quá thì thôi anh ạ, em cảm ơn!
Thì chổ GPE bạn sửa thành gì đó do bạn. Còn không nửa bạn đổi tên trước khi gửi. Còn nửa là tạo thư mục theo ngày tháng năm hiện tại bằng code luôn.
 
Upvote 0
Hoặc có phương án như thế này
Vẫn tạo thư mục mới nhưng ghép tên thư mục cha & GPE
ví dụ thư mục cha là 2807 (ngày tháng dạng "ddmm" thì ghép nó thành 2807GPE
. Còn nửa là tạo thư mục theo ngày tháng năm hiện tại bằng code luôn.
Nếu được thì anh giúp em cách này cũng được (lưu ý thư mục cha đã là 2807 (ngày tháng dạng "ddmm")Mong anh giúp em
 
Upvote 0
Hoặc có phương án như thế này
Vẫn tạo thư mục mới nhưng ghép tên thư mục cha & GPE
ví dụ thư mục cha là 2807 (ngày tháng dạng "ddmm" thì ghép nó thành 2807GPE

Nếu được thì anh giúp em cách này cũng được (lưu ý thư mục cha đã là 2807 (ngày tháng dạng "ddmm")Mong anh giúp em
Dùng thử vầy.
Mã:
Wb.SaveAs Filename:=Left(sFolder & Format(Now, "ddmm") & "GPE\" & iFile.Name, Len(sFolder & Format(Now, "ddmm") & "GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkbook
 
Upvote 0
Dùng thử vầy.
Mã:
Wb.SaveAs Filename:=Left(sFolder & Format(Now, "ddmm") & "GPE\" & iFile.Name, Len(sFolder & Format(Now, "ddmm") & "GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkbook
Em chưa thử nhưng thấy code trên nó lấy ngày hiện tại thì phải
Mã:
& Format(Now, "ddmm")
Thực tế thì công việc có thể ngày nào làm ngày đó thì code trên thì đúng, nhưng nhiều lúc ngày hôm sau mới làm thì tên thư mục nó không còn đúng nữa
Em nghỉ lấy tên thư mục cha ghép vào thì được hơn đó anh. Em cảm ơn!
 
Upvote 0
Em chưa thử nhưng thấy code trên nó lấy ngày hiện tại thì phải
Mã:
& Format(Now, "ddmm")
Thực tế thì công việc có thể ngày nào làm ngày đó thì code trên thì đúng, nhưng nhiều lúc ngày hôm sau mới làm thì tên thư mục nó không còn đúng nữa
Em nghỉ lấy tên thư mục cha ghép vào thì được hơn đó anh. Em cảm ơn!
Nếu muốn lấy tên từ một ô A1 nào đó trong Sheet ABC thì sửa lại thế này.
Mã:
Wb.SaveAs Filename:=Left(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name, Len(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkboo
 
Upvote 0
Nếu muốn lấy tên từ một ô A1 nào đó trong Sheet ABC thì sửa lại thế này.
Mã:
Wb.SaveAs Filename:=Left(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name, Len(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkboo
A cho em hỏi cái sheet ABC nó ở file nào vậy anh? file chạy code có code Sub DeleteAllCode() hay các file bị xóa code
Tất cả các file bị xóa code đều có 1 đặc điểm chung là tất cả đều có 1 tên sheet "Báo cáo" và trên sheet này tại ô C2 là ngày và ô E2 là tháng
Bài đã được tự động gộp:

Em có để sheet ABC trong file chứa Sub DeleteAllCode()
nhưng khi chạy code thì bị lỗi, nhờ anh tải file xuống và test
 

File đính kèm

  • XoaCode.xlsm
    17.6 KB · Đọc: 1
Lần chỉnh sửa cuối:
Upvote 0
A cho em hỏi cái sheet ABC nó ở file nào vậy anh? file chạy code có code Sub DeleteAllCode() hay các file bị xóa code
Tất cả các file bị xóa code đều có 1 đặc điểm chung là tất cả đều có 1 tên sheet "Báo cáo" và trên sheet này tại ô C2 là ngày và ô E2 là tháng
Bài đã được tự động gộp:

Em có để sheet ABC trong file chứa Sub DeleteAllCode()
nhưng khi chạy code thì bị lỗi, nhờ anh tải file xuống và test

Đã tìm ra nguyên nhân code bị lỗi là do thiếu chữ k trong
Mã:
FileFormat:=xlOpenXMLWorkboo
Nhưng code vẫn không tạo được thư mục
 
Upvote 0
Nếu muốn lấy tên từ một ô A1 nào đó trong Sheet ABC thì sửa lại thế này.
Mã:
Wb.SaveAs Filename:=Left(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name, Len(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkboo
Em đã tạo được thư mục theo ô A1 nào đó trong Sheet ABC
Mã:
MkDir sFolder & "\" & Sheets("ABC").Range("A1").Value & "GPE"
Nhưng em dùng code của anh
Mã:
Wb.SaveAs Filename:=Left(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name, Len(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkboo
để nó lưu file .xlsx vào thư mục trên thì chưa lưu được
Cụ thể code em sau khi chỉnh
Mã:
Sub DeleteAllCode()
    On Error Resume Next
    Const ExcelExtension As String = "|xlsb|xlsm|"
    Dim Wb As Workbook
    Dim x As Integer
    Dim sFolder As String, iFile As Object, FullPath As String
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
    With CreateObject("Scripting.FileSystemObject")
        sFolder = .GetParentFolderName(ThisWorkbook.FullName)
        MkDir sFolder & "\" & Sheets("ABC").Range("A1").Value & "GPE"
        For Each iFile In .GetFolder(sFolder).Files
            If InStr(ExcelExtension, "|" & .GetExtensionName(iFile.Path) & "|") > 0 Then
                If iFile.Path <> ThisWorkbook.FullName And Left(iFile.Name, 2) <> "~$" Then
                    Set Wb = Workbooks.Open(sFolder & "\" & iFile.Name)
                    Wb.SaveAs Filename:=Left(sFolder & "\" & Sheets("ABC").Range("A1").Value & "GPE" & "\" & iFile.Name, Len(sFolder & "\" & Sheets("ABC").Range("A1").Value & "GPE" & "\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkbook
                    Wb.Close False
                    Set Wb = Nothing
                End If
            End If
        Next
    End With
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True
    MsgBox "Da thuc hien xong", vbExclamation, "NopBaoCao!"
End Sub
Anh chị vui lòng sửa code giúp em! Em cảm ơn.
 
Upvote 0
Em đã tạo được thư mục theo ô A1 nào đó trong Sheet ABC
Mã:
MkDir sFolder & "\" & Sheets("ABC").Range("A1").Value & "GPE"
Nhưng em dùng code của anh
Mã:
Wb.SaveAs Filename:=Left(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name, Len(sFolder & Sheets("ABC").Range("A1").Value & "GPE\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkboo
để nó lưu file .xlsx vào thư mục trên thì chưa lưu được
Cụ thể code em sau khi chỉnh
Mã:
Sub DeleteAllCode()
    On Error Resume Next
    Const ExcelExtension As String = "|xlsb|xlsm|"
    Dim Wb As Workbook
    Dim x As Integer
    Dim sFolder As String, iFile As Object, FullPath As String
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
    With CreateObject("Scripting.FileSystemObject")
        sFolder = .GetParentFolderName(ThisWorkbook.FullName)
        MkDir sFolder & "\" & Sheets("ABC").Range("A1").Value & "GPE"
        For Each iFile In .GetFolder(sFolder).Files
            If InStr(ExcelExtension, "|" & .GetExtensionName(iFile.Path) & "|") > 0 Then
                If iFile.Path <> ThisWorkbook.FullName And Left(iFile.Name, 2) <> "~$" Then
                    Set Wb = Workbooks.Open(sFolder & "\" & iFile.Name)
                    Wb.SaveAs Filename:=Left(sFolder & "\" & Sheets("ABC").Range("A1").Value & "GPE" & "\" & iFile.Name, Len(sFolder & "\" & Sheets("ABC").Range("A1").Value & "GPE" & "\" & iFile.Name) - 4) & "xlsx", FileFormat:=xlOpenXMLWorkbook
                    Wb.Close False
                    Set Wb = Nothing
                End If
            End If
        Next
    End With
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True
    MsgBox "Da thuc hien xong", vbExclamation, "NopBaoCao!"
End Sub
Anh chị vui lòng sửa code giúp em! Em cảm ơn.
Up file thực tế của bạn lên đây mình xem thử.
 
Upvote 0
Gởi Anh 2 File
File XoaCode dùng xóa code còn file còn lại là bị xóa code và lưu vào thư mục mới
Em cảm ơn!
Dùng code này.
Mã:
Sub DeleteAllCode()
    'On Error Resume Next
    Const ExcelExtension As String = "|xlsb|xlsm|"
    Dim Wb As Workbook, s$, sFile$
    Dim x As Integer
    Dim sFolder As String, iFile As Object, FullPath As String
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
    With CreateObject("Scripting.FileSystemObject")
        sFolder = .GetParentFolderName(ThisWorkbook.FullName)
        s = sFolder & "\" & Sheets("ABC").Range("A1").Value & "GPE"
        If Not .FolderExists(s) Then
             .CreateFolder (s)
        End If
        For Each iFile In .GetFolder(sFolder).Files
            If InStr(ExcelExtension, "|" & .GetExtensionName(iFile.Path) & "|") > 0 Then
                If iFile.Path <> ThisWorkbook.FullName And Left(iFile.Name, 2) <> "~$" Then
                    Set Wb = Workbooks.Open(sFolder & "\" & iFile.Name)
                    sFile = s & "\" & .GetBaseName(iFile)
                    Wb.SaveAs Filename:=sFile & "xlsx", FileFormat:=xlOpenXMLWorkbook
                    Wb.Close False
                End If
            End If
        Next
    End With
    Set Wb = Nothing
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True
    MsgBox "Da thuc hien xong", vbExclamation, "NopBaoCao!"
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom