Xin tư vấn code copy 1 file đuôi .xlsm, chỉnh sửa và lưu thành 1 file mới đuôi .xlsx

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

huevantran

Thành viên chính thức
Tham gia
27/4/22
Bài viết
55
Được thích
42
Em chào tất cả mọi người,

Em có 1 file làm việc, có sheet DATA chứa dữ liệu tập trung, và có các sheet còn lại chứa các biểu mẫu đã có sẵn các công thức để điền dữ liệu từ sheet DATA vào.
Em đang tìm cách viết 1 code Copy File Gốc (Đuôi .xlsm) thành 1 file mới, trong file mới em muốn xóa bỏ công thức 1 số vùng, đặt lại tên file, và lưu dưới dạng .xlsx.
Lý do file gốc em phải lưu dưới dạng .xlsm vì trong file có chứa code VBA, còn file mới copy ra em muốn lưu .xlsx để xóa bỏ code vba trước khi gửi cho người khác.
Mã code của em bên dưới, hiện tại em chỉ có thể copy file mới giống định dạng file gốc là dạng đuôi .xlsm, nếu đổi sang .xlsx sẽ bị lỗi.
Nhờ các anh/chị xem và hướng dẫn em cách chuyển file mới thành .xlsx được không ạ. Em cảm ơn.

Mã:
Sub Copy()
    Application.DisplayAlerts = False
    Dim FileGoc As Workbook
    Dim FileMoi As Workbook
    Dim Duong_dan As String
    Dim Ten_File As String
    Duong_dan = ThisWorkbook.Path & "\"
    Set FileGoc = ThisWorkbook
    Ten_File = FileGoc.Sheets("DATA").Range("B1").Value
    FileGoc.SaveCopyAs Duong_dan & Ten_File & ".xlsm"
    Set FileMoi = Workbooks.Open(Duong_dan & Ten_File & ".xlsm")
    FileMoi.Sheets("DS").Range("A11:G19").Value = FileMoi.Sheets("DS").Range("A11:G19").Value
    FileMoi.Sheets("DS").Range("N11:U19").Value = FileMoi.Sheets("DS").Range("N11:U19").Value
    FileMoi.Sheets("DATA").Delete
    FileMoi.Close SaveChanges:=True
    Application.DisplayAlerts = True
End Sub
 
Mình đang làm theo phương án sau:
-Move_Copy sheet chứa báo cáo cần gửi sang workbook mới xong
-Lưu file dưới dạng xlsx
-remove link file mới với file cũ.

không biết có đúng yêu cầu của bạn không
 
Upvote 0
Mình đang làm theo phương án sau:
-Move_Copy sheet chứa báo cáo cần gửi sang workbook mới xong
-Lưu file dưới dạng xlsx
-remove link file mới với file cũ.

không biết có đúng yêu cầu của bạn không
File của em có nhiều sheet chứa công thức anh ạ, em chỉ cần xóa sheet data khỏi file gửi đi là được nên em mới thử Copy nguyên cả file gốc. Nếu cách của em không làm được em sẽ thử theo cách anh chỉ xem sao.

Em úp file đó lên đây.
Em gửi 1 file giả lập đơn giản lên, nhờ anh xem giúp em với ạ.
 

File đính kèm

  • VAN - GPE.xlsm
    34.1 KB · Đọc: 12
Upvote 0

Em xem mi ni súp này nhé

PHP:
Sub miniCopy()
    Application.DisplayAlerts = False
    Dim FileGoc As Workbook, strPathFileGoc As String
    Dim FileMoi As Workbook
    Dim Duong_dan As String
    Dim Ten_File As String
 
    strPathFileGoc = ThisWorkbook.FullName
    Duong_dan = ThisWorkbook.Path & "\" '"
    Set FileGoc = ThisWorkbook
    Ten_File = FileGoc.Sheets("DATA").Range("B1").Value
    FileGoc.SaveAs Filename:=Duong_dan & Ten_File & ".xlsx", FileFormat:=xlOpenXMLWorkbook
    Set FileMoi = Workbooks.Open(Duong_dan & Ten_File & ".xlsx")
    FileMoi.Sheets("DS").Range("A11:G19").Value = FileMoi.Sheets("DS").Range("A11:G19").Value
    FileMoi.Sheets("DS").Range("N11:U19").Value = FileMoi.Sheets("DS").Range("N11:U19").Value
    On Error Resume Next
    FileMoi.Sheets("DATA").Delete
    On Error GoTo 0
    Call Workbooks.Open(strPathFileGoc)
    FileMoi.Close SaveChanges:=True
    Application.DisplayAlerts = True
End Sub
 
Upvote 0
Em xem mi ni súp này nhé

PHP:
Sub miniCopy()
    Application.DisplayAlerts = False
    Dim FileGoc As Workbook, strPathFileGoc As String
    Dim FileMoi As Workbook
    Dim Duong_dan As String
    Dim Ten_File As String
 
    strPathFileGoc = ThisWorkbook.FullName
    Duong_dan = ThisWorkbook.Path & "\" '"
    Set FileGoc = ThisWorkbook
    Ten_File = FileGoc.Sheets("DATA").Range("B1").Value
    FileGoc.SaveAs Filename:=Duong_dan & Ten_File & ".xlsx", FileFormat:=xlOpenXMLWorkbook
    Set FileMoi = Workbooks.Open(Duong_dan & Ten_File & ".xlsx")
    FileMoi.Sheets("DS").Range("A11:G19").Value = FileMoi.Sheets("DS").Range("A11:G19").Value
    FileMoi.Sheets("DS").Range("N11:U19").Value = FileMoi.Sheets("DS").Range("N11:U19").Value
    On Error Resume Next
    FileMoi.Sheets("DATA").Delete
    On Error GoTo 0
    Call Workbooks.Open(strPathFileGoc)
    FileMoi.Close SaveChanges:=True
    Application.DisplayAlerts = True
End Sub
Cảm ơn anh rất nhiều, em làm được rồi ạ.
 
Upvote 0
Em chào tất cả mọi người,

Em có 1 file làm việc, có sheet DATA chứa dữ liệu tập trung, và có các sheet còn lại chứa các biểu mẫu đã có sẵn các công thức để điền dữ liệu từ sheet DATA vào.
Em đang tìm cách viết 1 code Copy File Gốc (Đuôi .xlsm) thành 1 file mới, trong file mới em muốn xóa bỏ công thức 1 số vùng, đặt lại tên file, và lưu dưới dạng .xlsx.
Lý do file gốc em phải lưu dưới dạng .xlsm vì trong file có chứa code VBA, còn file mới copy ra em muốn lưu .xlsx để xóa bỏ code vba trước khi gửi cho người khác.
Mã code của em bên dưới, hiện tại em chỉ có thể copy file mới giống định dạng file gốc là dạng đuôi .xlsm, nếu đổi sang .xlsx sẽ bị lỗi.
Nhờ các anh/chị xem và hướng dẫn em cách chuyển file mới thành .xlsx được không ạ. Em cảm ơn.

Mã:
Sub Copy()
    Application.DisplayAlerts = False
    Dim FileGoc As Workbook
    Dim FileMoi As Workbook
    Dim Duong_dan As String
    Dim Ten_File As String
    Duong_dan = ThisWorkbook.Path & "\"
    Set FileGoc = ThisWorkbook
    Ten_File = FileGoc.Sheets("DATA").Range("B1").Value
    FileGoc.SaveCopyAs Duong_dan & Ten_File & ".xlsm"
    Set FileMoi = Workbooks.Open(Duong_dan & Ten_File & ".xlsm")
    FileMoi.Sheets("DS").Range("A11:G19").Value = FileMoi.Sheets("DS").Range("A11:G19").Value
    FileMoi.Sheets("DS").Range("N11:U19").Value = FileMoi.Sheets("DS").Range("N11:U19").Value
    FileMoi.Sheets("DATA").Delete
    FileMoi.Close SaveChanges:=True
    Application.DisplayAlerts = True
End Sub

Bạn thử code này

Mã:
Sub CopyAndSaveAsXLSX()
    Dim wbSource As Workbook
    Dim wbNew As Workbook
    
    ' Mở tệp .xlsm nguồn
    Set wbSource = Workbooks.Open("Đường_dẫn_tệp.xlsm")
    
    ' Tạo một bản sao của tệp .xlsm
    wbSource.SaveCopyAs "Đường_dẫn_để_lưu_một_bản_sao.xlsm" ' Lưu thành một tệp .xlsx
    
    ' Đảm bảo rằng đã tạo ra một bản sao ưu tiên nếu có
    Application.DisplayAlerts = False
    
    ' Mở tệp .xlsx
    Set wbNew = Workbooks.Open("Đường_dẫn_tệp.xlsm")
    
    ' Thực hiện các chỉnh sửa cần thiết ở đây nếu có
    
    ' Lưu lại tệp .xlsx
    wbNew.SaveAs "Đường_dẫn_tệp.xlsx", FileFormat:=xlOpenXMLWorkbook
    
    ' Đóng các tệp
    wbSource.Close SaveChanges:=False
    wbNew.Close SaveChanges:=False
  
    ' Bật cảnh báo trở lại
    Application.DisplayAlerts = True
End Sub
 
Upvote 0
Em xem mi ni súp này nhé

PHP:
Sub miniCopy()
    Application.DisplayAlerts = False
    Dim FileGoc As Workbook, strPathFileGoc As String
    Dim FileMoi As Workbook
    Dim Duong_dan As String
    Dim Ten_File As String
 
    strPathFileGoc = ThisWorkbook.FullName
    Duong_dan = ThisWorkbook.Path & "\" '"
    Set FileGoc = ThisWorkbook
    Ten_File = FileGoc.Sheets("DATA").Range("B1").Value
    FileGoc.SaveAs Filename:=Duong_dan & Ten_File & ".xlsx", FileFormat:=xlOpenXMLWorkbook
    Set FileMoi = Workbooks.Open(Duong_dan & Ten_File & ".xlsx")
    FileMoi.Sheets("DS").Range("A11:G19").Value = FileMoi.Sheets("DS").Range("A11:G19").Value
    FileMoi.Sheets("DS").Range("N11:U19").Value = FileMoi.Sheets("DS").Range("N11:U19").Value
    On Error Resume Next
    FileMoi.Sheets("DATA").Delete
    On Error GoTo 0
    Call Workbooks.Open(strPathFileGoc)
    FileMoi.Close SaveChanges:=True
    Application.DisplayAlerts = True
End Sub
Em chào anh,
Cho em hỏi anh thêm chút với nha, với mã code này thì khi chạy trên bản Excel 2021 thì cho kết quả đúng, tuy nhiên khi em chạy trên máy tính cá nhân ở nhà sử dụng Excel 2016 thì báo lỗi, em có kiểm tra thì máy em đang dùng đã là bản Excel 64 bit. Đóng hết tất cả các ứng dụng và chạy dữ liệu giả lập nhưng vẫn báo lỗi, nhờ anh xem giúp em nguyên nhân là gì với ạ.
1694917712772.png1694917745080.png
 
Upvote 0
Em chào anh,
Cho em hỏi anh thêm chút với nha, với mã code này thì khi chạy trên bản Excel 2021 thì cho kết quả đúng, tuy nhiên khi em chạy trên máy tính cá nhân ở nhà sử dụng Excel 2016 thì báo lỗi, em có kiểm tra thì máy em đang dùng đã là bản Excel 64 bit. Đóng hết tất cả các ứng dụng và chạy dữ liệu giả lập nhưng vẫn báo lỗi, nhờ anh xem giúp em nguyên nhân là gì với ạ.
View attachment 294890View attachment 294892
Bạn dịch đoạn tiếng anh kia ra tiếng Việt là có kết quả liền à
 
Upvote 0
@Thớt: Em khởi động lại máy tính nhé.
Em đã thử nhưng cũng không được anh ạ, em có mượn máy 1 bạn khác chạy thử trên bản Excel 2013 thì cũng báo lỗi như em. Nguyên nhân có phải do cách thức mở và lưu file xlsx giữa các phiên bản Excel là khác nhau phải không anh.
 
Upvote 0
Thực tế file mình làm việc thì việc copy paste value cũng từng lỗi như bạn. (Do file mình chưa nhiều dòng dữ liệu ~ 200k dòng, nhiều công thức sumifs, vlookup).

Nếu file bạn làm không đơn giản chỉ có 2 vùng paste value trên thì bạn thử cách mình gửi ý ở bài viết #2 trên xem sao, cách này mình thấy hạn chế việc tính toán lại khi lưu file xlsx nên không bị lỗi không đủ bộ nhớ.
 
Upvote 0
Thực tế file mình làm việc thì việc copy paste value cũng từng lỗi như bạn. (Do file mình chưa nhiều dòng dữ liệu ~ 200k dòng, nhiều công thức sumifs, vlookup).

Nếu file bạn làm không đơn giản chỉ có 2 vùng paste value trên thì bạn thử cách mình gửi ý ở bài viết #2 trên xem sao, cách này mình thấy hạn chế việc tính toán lại khi lưu file xlsx nên không bị lỗi không đủ bộ nhớ.
Dữ liệu của em ít thôi anh ạ. Nếu vậy em sẽ thử làm theo hướng của anh xem sao. Cảm ơn anh.
 
Upvote 0
Em chỉnh 2 dòng này nhé.

PHP:
    FileMoi.Sheets("DS").Range("A11:G19").Value = FileMoi.Sheets("DS").Range("A11:G19").Value2
    FileMoi.Sheets("DS").Range("N11:U19").Value = FileMoi.Sheets("DS").Range("N11:U19").Value2
Em đã thử những vẫn không được anh ạ.

Thực tế file mình làm việc thì việc copy paste value cũng từng lỗi như bạn. (Do file mình chưa nhiều dòng dữ liệu ~ 200k dòng, nhiều công thức sumifs, vlookup).

Nếu file bạn làm không đơn giản chỉ có 2 vùng paste value trên thì bạn thử cách mình gửi ý ở bài viết #2 trên xem sao, cách này mình thấy hạn chế việc tính toán lại khi lưu file xlsx nên không bị lỗi không đủ bộ nhớ.
Em đã làm theo cách của anh và đã giải được vấn đề của mình, file chạy cũng nhanh hơn, dễ tùy biến hơn. Cảm ơn anh đã chỉ dẫn.
 
Upvote 0
Web KT

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

Back
Top Bottom