2022-04-25

打開文件自動備份

前言:

  • 一直忙一直忙,今天終于有空看下VBA了,才發(fā)現(xiàn)之前學習過的全部忘了,筆記放哪也不知道了,想想這回做筆記應該在博文上寫,這樣才能隨時隨地都能查到。
  • 天天與數(shù)字打交道,天天都編輯電子表格文件,如果操作有誤,撤銷回來就行,但有時候撤銷步驟有限,或者中間自己點了保存,根本無法還原到想要的內(nèi)容。因此想通過VBA代碼來實現(xiàn)打開工作簿時自動備份文件 ,如果無意中破壞了數(shù)據(jù),還可以通過備份文件來恢復一切數(shù)據(jù)。

解決思路

  • 采用Workbook.SaveCopyAsy方法將文件在打開時另存一份,要求另存的備份文件的名稱后面加“(bak)”


    image.png

操作方法1

  • 在模塊中錄入以下代碼
Sub auto_open()
  Dim hzm As String
  hzm = Trim(Right(Replace(ThisWorkbook.Name, ".", Space(100)), 100))
  ThisWorkbook.SaveCopyAs Replace(ThisWorkbook.FullName, hzm, hzm & "(bak)")
End Sub
  • 模塊中的代碼效果圖


    image.png

操作方法2

  • 通過Workbook打開事件實現(xiàn)自動備份
Private Sub Workbook_Open()
  Dim hzm As String
  hzm = Trim(Right(Replace(ThisWorkbook.Name, ".", Space(100)), 100))
  ThisWorkbook.SaveCopyAs Replace(ThisWorkbook.FullName, hzm, hzm & "(bak)")
End Sub
  • ThisWorkbook中的代碼效果圖


    image.png

完成效果圖

  • 保存關閉文件,把文件復制到別的文件夾,打開文件后,會發(fā)現(xiàn)同文件夾里多了一個備份文件。


    image.png

原理分析

  • VBA中規(guī)定名為“Auto_Open”且存放在模中的子程序可以隨著打開文件而自動執(zhí)行,所以操作方法1可行。
  • 模塊中的“Auto_Open”子程序和工作簿事件“Workbook_Open”的功能是一樣的,不過工作簿事件的代碼只能放在ThisWorkbook代碼窗口中,不能存放在模塊中。
  • 在備份數(shù)據(jù)時,應采用ThisWorkbook.SaveCopyAs 方法,不能使用 ThisWorkbook.SaveAs方法。因為備份文件后活動工作簿依然是當前工作簿,而另存的文件成了活動工作簿,搞不好錯誤編輯備份文件了。

我的小筆記

  • Replace(ThisWorkbook.Name, ".", Space(100))為將文件名中的所有點替換成100個空格。
  • Right(*,100)從右邊取100個字符,得到的結(jié)果應是“ xlsm”,其實后綴名只有幾位,100位前面肯定是空格,因為前面故意加了100個空格,也可以適當少加點。
  • trim函數(shù)目的是去掉前面的空格,就得到完整的后綴名“xlsm”,然后把這個后綴名賦給變量“hzm”
  • Workbook.SaveCopyAs 方法,將工作簿副本保存到文件中,但不修改內(nèi)存中打開的工作簿。表達式:SaveCopyAs (FileName)

升級優(yōu)化

  • 上述達備份的目的,但都是只有一個備份文件,都是最新的備分份替換了舊的備份,想找回更加久遠的內(nèi)容就不可能了,應該設置成多個備份文件,而且每個備份文件帶有時間標志便于區(qū)分。
Sub auto_open()
  Dim hzm As String
  Dim tim As String
  hzm = Trim(Right(Replace(ThisWorkbook.Name, ".", Space(100)), 100))
  tim = Format(Now(), "yyyymmddhhmmss")
  ThisWorkbook.SaveCopyAs Replace(ThisWorkbook.FullName, hzm, hzm & "(bak)" & tim)
End Sub
image.png

后記

  • 可以實現(xiàn)備份了是真的,可備份文件多了也占空間哦,這個問題還是留給小朋友們自已想想辦法吧。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容