Thủ tục sao lưu file hiện hành ra 1 file mới (Backup file) trong cùng 1 thư mục

Liên hệ QC

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,902
Được thích
5,303
Nghề nghiệp
Kinh doanh các mặt hàng văn phòng phẩm
Mình gửi các bạn Sub tạo file sao lưu trong cùng một thư mục
PHP:
Sub BackupFile()
Application.ScreenUpdating = False
On Error Resume Next
Path_OldFile = ActiveWorkbook.FullName
Path = Left(Path_OldFile, InStrRev(Path_OldFile, "\", , 1) - 1)
Name_NewFile = Replace(Replace(Path_OldFile, Path & "\", ""), ".xls", "")
Name_NewFile = Name_NewFile & "-Backup-" & Format(Now, "dd-mm-yyyy  hh-mm-ss") & ".xls"
ActiveWorkbook.Save
ActiveWorkbook.SaveAs Filename:=Path & "\" & Name_NewFile
Workbooks.Open Filename:=Path_OldFile
Workbooks(Name_NewFile).Close
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Mình gửi các bạn Sub tạo file sao lưu trong cùng một thư mục
PHP:
Sub BackupFile()
Application.ScreenUpdating = False
On Error Resume Next
Path_OldFile = ActiveWorkbook.FullName
Path = Left(Path_OldFile, InStrRev(Path_OldFile, "\", , 1) - 1)
Name_NewFile = Replace(Replace(Path_OldFile, Path & "\", ""), ".xls", "")
Name_NewFile = Name_NewFile & "-Backup-" & Format(Now, "dd-mm-yyyy  hh-mm-ss") & ".xls"
ActiveWorkbook.Save
ActiveWorkbook.SaveAs Filename:=Path & "\" & Name_NewFile
Workbooks.Open Filename:=Path_OldFile
Workbooks(Name_NewFile).Close
Application.ScreenUpdating = True
End Sub
Bạn dùng
ActiveWorkbook.Path

ActiveWorkbook.Name
sẽ gọn hơn là tách ActiveWorkbook.FullName bằng Left rồi InStrRev ---> Tôi nghĩ vậy
 
Upvote 0
Cảm ơn bạn đã gửi Sub tạo file sao lưu hay, minh rất cần thủ tục này thường xuyên
 
Upvote 0
Mình gửi các bạn Sub tạo file sao lưu trong cùng một thư mục
PHP:
Sub BackupFile()
Application.ScreenUpdating = False
On Error Resume Next
Path_OldFile = ActiveWorkbook.FullName
Path = Left(Path_OldFile, InStrRev(Path_OldFile, "\", , 1) - 1)
Name_NewFile = Replace(Replace(Path_OldFile, Path & "\", ""), ".xls", "")
Name_NewFile = Name_NewFile & "-Backup-" & Format(Now, "dd-mm-yyyy  hh-mm-ss") & ".xls"
ActiveWorkbook.Save
ActiveWorkbook.SaveAs Filename:=Path & "\" & Name_NewFile
Workbooks.Open Filename:=Path_OldFile
Workbooks(Name_NewFile).Close
Application.ScreenUpdating = True
End Sub

Nếu để backup thì có thể dùng SaveCopyAs đơn giản hơn.
Thân
 
Upvote 0
Chưa hiểu lắm
Nhờ bạn hoangvuluan giãi thích thêm!
Code trên là SaveAs ---> vậy SaveCopyAs là cái gì? Dùng làm sao?

SaveCopyAs Method
Save một bản sao của workbôk ra 1 file mà không làm thay đổi workbook đang được mở .
Saves a copy of the workbook to a file but doesn't modify the open workbook in memory.

expression.SaveCopyAs(Filename)

expression Required. An expression that returns a Workbook object.

Filename Required. Specifies the file name for the copy.

Example

This example saves a copy of the active workbook.

ActiveWorkbook.SaveCopyAs "path + name + ext ..."
 
Upvote 0
SaveCopyAs Method
Save một bản sao của workbôk ra 1 file mà không làm thay đổi workbook đang được mở .
Saves a copy of the workbook to a file but doesn't modify the open workbook in memory.

expression.SaveCopyAs(Filename)

expression Required. An expression that returns a Workbook object.

Filename Required. Specifies the file name for the copy.

Example

This example saves a copy of the active workbook.

ActiveWorkbook.SaveCopyAs "path + name + ext ..."
Thì ra nó là 1 phương thức... Tôi hiểu rồi
SaveCopyAs này hơi bị ngon à nha ---> Dùng nó ta khỏi mất công đóng file mới, mở file củ ---> Nó cứ "âm thầm lặng lẽ" mà Save thôi
Ẹc... Ec...
Có lý... Cãm ơn bạn.. 3 lần liên tiếp về kiến thức mới này
Vậy có thể rút gọn code trên thành:
PHP:
Option Explicit
Sub BackupFile()
  Dim NewFile As String, OldFile As String
  OldFile = Replace(ThisWorkbook.Name, ".xls", "")
  NewFile = OldFile & "-Backup-" & Format(Now, "dd-mm-yyyy  hh-mm-ss")
  ActiveWorkbook.SaveCopyAs ThisWorkbook.Path & "\" & NewFile & ".xls"
End Sub
Quá ngon
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi nghĩ thế này mới là ngắn gọn nhất đây:
PHP:
Sub Backup()
 With ThisWorkbook
   .Save
   .SaveCopyAs Replace(.FullName, .Name, "Bak" & Format(Now, "_ddmmyy_hhmmss_") & .Name)
 End With
End Sub
Ko cần khai báo bất cứ 1 biến nào
 
Upvote 0
Tôi nghĩ thế này mới là ngắn gọn nhất đây:
PHP:
Sub Backup()
 With ThisWorkbook
   .Save
   .SaveCopyAs Replace(.FullName, .Name, "Bak" & Format(Now, "_ddmmyy_hhmmss_") & .Name)
 End With
End Sub
Ko cần khai báo bất cứ 1 biến nào



Với .SaveCopyAs thì code ngắn đi đáng kể. Kết hợp với việc Bác đảo lại tên file sao lưu thì lại ngắn hơn nữa, vì không cần phải replace thêm một lần nữa.

Cái này : .Save có lẽ cũng không cần vì nhiều khi người sử dụng không muốn lưu file thì sao.
 
Upvote 0
Rất hay !
Nhưng còn thiếu Import lại ?
 
Upvote 0
Hay quá. Có thêm 1 chức năng bổ sung vào menu. Nhưng đẻ cho người sử dụng yên tâm ngắm ngia khi chay đoạn code này mà vẫn biết là đang chạy ct chứ kg phải treo máy thì cho thêm 1 đoạn code và form hiển thị phần trăm công việc hoàn thành thì ta nên kg nhỉ?
 
Upvote 0
Chào bạn,

Mình chưa hiểu rõ về cách thựa hiện thao tát này ntn? bạn co thể chi rõ hơn là mình sẽ thực hiện ở đâu trên windows ỏ Excel.

Cám ơn
 
Upvote 0
Tôi nghĩ thế này mới là ngắn gọn nhất đây:
PHP:
Sub Backup()
 With ThisWorkbook
   .Save
   .SaveCopyAs Replace(.FullName, .Name, "Bak" & Format(Now, "_ddmmyy_hhmmss_") & .Name)
 End With
End Sub
Ko cần khai báo bất cứ 1 biến nào

+ a Bỏ .Save đi

+ Nên thêm chức năng sau bao nhiêu phút thì lưu lại 1 lần (ví dụ 10 phút) ==> tự lưu

+ nếu thêm được thì rất tốt đó là: Khi treo máy thì tự lưu lại

+ đúng như 1 bạn trên nói đã back up được ==> sao không Restore lại chính file đang chạy đó.

a nghiên cứu và thêm nhé (nếu busy thì bỏ qua)
.
 
Upvote 0
Nếu mình muốn tên của file được save sẽ bắt đầu bằng dữ liệu tai 1 ô trong bảng sheet thì làm như thế nào vậy bạn. ví dụ dữ liệu ở ô a1: Nguyễn Văn A.
mình muốn tên file save sẽ là Nguyễn Văn A 08-08-2009- 14h 00
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
Ah cho em hỏi thêm tý nữa nếu em muốn lưu vào vào vị trí (với tên như công thức trên): D:\Backup
thì phải khai báo như thế nào ah. (tại ổ đĩa D em đã có thư mục Backup)
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Ý bạn là vầy chứ gì?
PHP:
Sub Backup()
 With ThisWorkbook
   .Save
   .SaveCopyAs "D:\Backup\" & "Bak" & Format(Now, "_ddmmyy_hhmmss_") & .Name
 End With
End Sub
Thân.
 
Upvote 0
Nếu mình muốn tên của file được save sẽ bắt đầu bằng dữ liệu tai 1 ô trong bảng sheet thì làm như thế nào vậy bạn. ví dụ dữ liệu ở ô a1: Nguyễn Văn A.
mình muốn tên file save sẽ là Nguyễn Văn A 08-08-2009- 14h 00

Thì ở đường dẫn bạn đưa thêm
nữa là được

From QuôcHuy86
to: yeu doi
to: pikachu
cảm ơn 2 bạn mình đã làm thử và thành công :)) . Chúc vui vẻ:D
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Chào bạn,
Mình có một file exel, mỗi lần bấm Save là nó lại tạo một file backup mới.
Mình muốn bỏ việc sao lưu này đi, mà không biết cách làm thế nào.
Vui lòng chỉ giúp mình với nhé.
Cảm ơn các bạn!
 
Upvote 0
Web KT

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

Back
Top Bottom