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 (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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,306
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
Thanks cac bac nhìu nha. Em đang cần cái này. Nhân đây cho em hoi đã bác nào viết code sao lưu bằng cách tạo form lựa chọn sao lưu sheet mình cần chưa ạ
 
Upvote 0



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.



Thanks các bác nhìu nha. Nhân đây cho em hỏi đã bác nào viết code sao lưu cho sheet mình cần chưa ạ, bằng cách tạo form có lựa chọn sheet cần sao lưu ấy ạ
 
Upvote 0
Thanks các bác nhìu nha. Nhân đây cho em hỏi đã bác nào viết code sao lưu cho sheet mình cần chưa ạ, bằng cách tạo form có lựa chọn sheet cần sao lưu ấy ạ

Sao bạn không click chuột phải lên sheet cần copy, chọn Move or copy, click chọn Creat a copy, to To Book Chọn New Book xong lưu lại. muốn dùng code thì Record lại Macro.
Tạo 1 Userform, 1 combobox để lất tên sheet, 1 nút copy. Code như sau:

Mã:
Private Sub CommandButton1_Click()
Sheets(ComboBox1.Text).Copy
    ActiveWorkbook.SaveAs Filename:= _
       ThisWorkbook.Path & "\" & ComboBox1.Text & ".xls"
    ActiveWindow.Close
    
End Sub

Private Sub UserForm_Initialize()
For i = 1 To ThisWorkbook.Sheets.Count
    ComboBox1.AddItem ThisWorkbook.Sheets(i).Name
    
Next i

End Sub

Xem thêm file nhé.
 

File đính kèm

Upvote 0
Tôi là thành viên mới, tôi có vấn đề này đang gặp nhiều khó khăn muốn được GiaiphapExcel giúp đỡ. Tôi muốn tạo Sheét nhập chứng từ, thì số liệu sẽ tự động được chuyển sang Sheet2 và lưu tại Sheet2 theo hình thức luỹ kế. Khi tôi muốn nhập tiếp số liệu mới thì tôi phải xoá số liệu cũ trên Sheet1 đi để nhập, tuy nhiên để không bị mất số liệu đã lưu ở Sheet2 trước đó tôi phải làm sao? và làm sao để Sheet2 tiếp tục lưu dữ liệu sau đó? Rất mong được cộng đồng GiaiphapExcel chỉ giúp
Tôi chân thành cảm ơn!
 
Upvote 0
Oh, Có cả code như thế này nữa à, Các bác ơi em mù tịt về VBA nhưng hôm nay đi làm để máy tính mà ra ngoài không biết tên quỷ nào
delete mat cai file của em giờ phải làm lại từ đầu nè, tức quá, nên giờ tìm kiểu bạckup file từ thư mục này vào một thư mục khác, nhưng các đoạn code của các bác ở trên em không hiểu lắm.
Cho em hỏi là đoạn code trên có đoạn (.SaveCopyAs Replace(.FullName, .Name, "Bak" & Format(Now, "_ddmmyy_hhmmss_") & .Name)
có phải thay biến chẳng hạn như là đường dẫn thư mục gì không. mong các bác giúp đỡ tại em coppy đoạn code này vào module file của em mà không đuợc
Cảm ơn nhiều.
 
Upvote 0
Bạn gửi file lên đi, có thể mọi người sẽ giúp đựơc bạn đó, sức mạnh của tập thể thì có lẽ không gì là không thê làm được.
 
Upvote 0
Sao bạn không click chuột phải lên sheet cần copy, chọn Move or copy, click chọn Creat a copy, to To Book Chọn New Book xong lưu lại. muốn dùng code thì Record lại Macro.
Tạo 1 Userform, 1 combobox để lất tên sheet, 1 nút copy. Code như sau:

Mã:
Private Sub CommandButton1_Click()
Sheets(ComboBox1.Text).Copy
    ActiveWorkbook.SaveAs Filename:= _
       ThisWorkbook.Path & "\" & ComboBox1.Text & ".xls"
    ActiveWindow.Close
    
End Sub

Private Sub UserForm_Initialize()
For i = 1 To ThisWorkbook.Sheets.Count
    ComboBox1.AddItem ThisWorkbook.Sheets(i).Name
    
Next i

End Sub

Xem thêm file nhé.


Chào bạn có code nào mà tự nhận biết tên sheet không?
 
Upvote 0
Cảm ơn bạn harry potter về một ý tưởng rất hay, tuy nhiên cái mà tụi mình muốn nói là tự động lưu file ở một đường dẫn mà mình chọn trước ( Backup ) còn làm như bạn dường như cũng thủ công lắm, bạn có cách nào mới hơn ko ?
Cảm ơn.
 
Upvote 0
Cảm ơn anh Danh. Đoạn code cua a rất hay. Giờ em đang cần 1 file excel để quản lý các HĐLĐ(ngày ký, thời hạn và ngày hết hạn...). Anh có file mẫu thì post giùm em nhé.
Thanks!
 
Upvote 0
Bạn có thể hướng dẫn mình chi tiết cách sử dụng Backup này được không? thankyou.
 
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
Theo tôi Backup ở đây nghĩa là mình muốn lưu toàn file excel lại giống như một file nén bằng winrar hoặc winzip vậy đó có bác nào biết xin chỉ giúp. Chứ còn coppy sang thư muc khác hoặc save as thì chỉ cần coppy và past là được rồ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
Quá tuyệt vời, một đoạn code rất bổ ích.
Nhân đây cho mình hỏi thêm. Mình nuốn Backup chỉ 1 sheet chỉ định nào đó trong file trong cùng một thư mục thì đoạn code viết lại như thế nào ? Cám ơn nhiều !
 
Upvote 0
Các bạn ơi, cho mình hỏi có cách nào làm cho file excel mà mỗi khi bấm vào nút save thì nó sẽ tạo ra một file back up có tên tương tự và có luôn giờ ngày tháng, như vậy thì mình sẽ biết được thời điểm backup của file đó là khi nào. file backup mà được tạo ra sẽ được ở cùng nơi với file gốc.

Nhờ các bạn hướng dẫn chi tiết vì mình chưa biết nhiều về excel.Mong được giúp đỡ, xin chân thành cảm ơn.
 
Upvote 0
mình có copy đoạn code trên đó về và dán vào cửa sổ modle nhưng cũng chẳng thấy kết quả gì. Có ai biết cách dùng như thế nào kô ?
 
Upvote 0
Các anh chị giúp em đoạn code xóa file củ đã Backup và lưu lại file mới vừa Backup được không?
 
Upvote 0
Các bạn ơi, cho mình hỏi có cách nào làm cho file excel mà mỗi khi bấm vào nút save trong mircosoft excel thì nó sẽ tạo ra một file back up có tên tương tự và có luôn giờ ngày tháng, như vậy thì mình sẽ biết được thời điểm backup của file đó là khi nào. file backup mà được tạo ra sẽ được ở cùng nơi với file gốc.

Nhờ các bạn hướng dẫn chi tiết vì mình chưa biết nhiều về excel.Mong được giúp đỡ, xin chân thành cảm ơn.

Mình cũng đang tìm cái này mà chẳng thấy ở đâu có cả mà cũng chẳng ai quan tâm vấn đề này nữa rồi.
 
Upvote 0
Mình cũng đang tìm cái này mà chẳng thấy ở đâu có cả mà cũng chẳng ai quan tâm vấn đề này nữa rồi.

bạn chỉ cần ínert thêm một button rồi copy code của anhtuan1066 ở các trang trước vào là được thôi . khi nào muốn save bấm vào nút đó một cái là được rồi. làm phức tạp thêm làm chi cho mệt.. còn code thì trên GPE rất nhiều bạn chịu khó đọc và test đi một ngày nào đó bạn ngộ ra một điều ..để làm ra được như vậy thì ra nó là như vầy thì lúc đó bạn bắt đầu hiểu code và viết được những đoạn code đơn giản rồi đó .mình đang học theo kiểu như vậy
chúc thành công
 
Upvote 0
Cám ơn bạn đã chia sẻ và hồi đáp. Sau một chút mài mò thì mình hiểu được ý của bạn và làm dc rồi. mình tạo một nút button trong form control. Rồi chép đoạn code trên vào modle mới. Cho mình hỏi, là mình muốn đổi màu nền của cái nút thì làm sao hả bạn
 
Upvote 0
Cám ơn bạn đã chia sẻ và hồi đáp. Sau một chút mài mò thì mình hiểu được ý của bạn và làm dc rồi. mình tạo một nút button trong form control. Rồi chép đoạn code trên vào modle mới. Cho mình hỏi, là mình muốn đổi màu nền của cái nút thì làm sao hả bạn
bạn kích chuột phải vào button /Properties/Backcolor/bấm vào hình Tam giác / list sổ xuống / kích chọn màu bạn thích
nói chung trong Properties bạn làm được nhiều thứ Bạn cứ Từ Từ Nghiên cứu nhé
 
Upvote 0
- dùng Save xong SaveAs thì ActiveWork book sẽ là file backup. nên dùng 2 lần SaveAs (theo thứ tự đảo ngược) thì tốt hơn.

- cái này cũng gọn:

Dim FS As Object
Set FS = CreateObject("Scripting.FileSystemObject")
FS.CopyFile FullNameCopy, FullNamePaste
Set FS = Nothing
 
Upvote 0
chào ACE diễn đàn,

ai có code tự động backup khi tắt file excel không????
hiện giờ toàn phải Alt + F11 rồi chạy run thì nó mới có backup. Hic**~**
 
Upvote 0
chào ACE diễn đàn,

ai có code tự động backup khi tắt file excel không????
hiện giờ toàn phải Alt + F11 rồi chạy run thì nó mới có backup. Hic**~**
Bạn tạo sự kiện before close (Trước khi đóng)
- ALT + F11
- Cửa sổ VBA mở ra, click đúp vào ThisWorkbook, copy đoạn code này vào:
Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
   .Save
   .SaveCopyAs Replace(.FullName, .Name, "Bak" & Format(Now, "_ddmmyy_hhmmss_") & .Name)
End With
End Sub
 
Upvote 0
Bạn tạo sự kiện before close (Trước khi đóng)
- ALT + F11
- Cửa sổ VBA mở ra, click đúp vào ThisWorkbook, copy đoạn code này vào:
Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
   .Save
   .SaveCopyAs Replace(.FullName, .Name, "Bak" & Format(Now, "_ddmmyy_hhmmss_") & .Name)
End With
End Sub
Nếu mình muốn ấn định folder để save file thì làm sao hả bạn
 
Upvote 0
Mình dùng code này để lưu thành file *.vbs để dùng chương trình Task Scheduler hẹn giờ mở để sao lưu file Excel, nhưng khi mở nó hiện ra cái bảng lựa chọn chương trình để chạy (đã chọn chương trình mặc định rồi), trong khi mở trực tiếp thì được.

218537

Code file vbs đây ạ:

Mã:
Dim FSO
Dim strSourcePath, strBackupPath
Dim NgayThang

NgayThang = Year(now) &"_" & Right("0" & Month(Now), 2) &"_" & Right("0" & Day(now), 2) &"_" & HOur(now) &"-" & minute(now) &"-" & second(now)
strSourcePath="H:\Shop A&T\A&T.xlsb"
strBackupPath="E:\Sao Luu File Ban Hang\A&T_" & NgayThang & ".xlsb"

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFile strSourcePath, strBackupPath
Set FSO = Nothing

Nhờ các bạn chỉ giúp!
Đa tạ!
 
Upvote 0
Mình dùng code này để lưu thành file *.vbs để dùng chương trình Task Scheduler hẹn giờ mở để sao lưu file Excel, nhưng khi mở nó hiện ra cái bảng lựa chọn chương trình để chạy (đã chọn chương trình mặc định rồi), trong khi mở trực tiếp thì được.

View attachment 218537

Code file vbs đây ạ:

Mã:
Dim FSO
Dim strSourcePath, strBackupPath
Dim NgayThang

NgayThang = Year(now) &"_" & Right("0" & Month(Now), 2) &"_" & Right("0" & Day(now), 2) &"_" & HOur(now) &"-" & minute(now) &"-" & second(now)
strSourcePath="H:\Shop A&T\A&T.xlsb"
strBackupPath="E:\Sao Luu File Ban Hang\A&T_" & NgayThang & ".xlsb"

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFile strSourcePath, strBackupPath
Set FSO = Nothing

Nhờ các bạn chỉ giúp!
Đa tạ!
Bạn sang đọc bài viết bên này xem, phương pháp trên chỉ dành cho lập trình viên:
https://www.giaiphapexcel.com/diendan/threads/demo-form-sao-lưu-file-có-tuỳ-chọn-nén-và-thiết-lập-sao-lưu-định-kỳ-tự-động-task-scheduler.142610/#post-919494
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom