會玩失蹤的Excel文件——Excel自殺

最近在升級本月14號發佈的通訊錄管理工具,應朋友們的要求,會增加很多功能,比如:數據導入、數據導出、增加顯示一個電話號碼、增加保密措施、增加數據聯動檢索等……更新的工具還在編制中,爭取本月內和大家見面。

今天就來和大家分享下文件保密措施中的一個小設置:Excel文件的自殺。

為什麼要讓文件自殺呢?假設你的重要數據被不法分子得到了,通過他對文件的一些操作,來觸發自殺代碼的執行,讓文件瞬間灰飛煙滅,從而保護我們數據的安全。


一、何為自殺代碼

會玩失蹤的Excel文件——Excel自殺

<code>Sub Killme()
With ThisWorkbook '對當前工作薄
.Saved = True '保存文件
.ChangeFileAccess xlReadOnly '將當前工作簿設為只讀。
Kill .FullName 'Kill:從磁盤中刪除文件;
.Close '關閉Excel
End With
End Sub/<code>

當代碼執行到【Kill .FullName】這一句的時候,文件就代碼所在的文件【上圖中的示例文件】就被刪除了。


二、在什麼時候執行

自殺代碼在什麼時候執行呢?常規是在文件打開的時候,這裡就會用到Workbook的Open事件

會玩失蹤的Excel文件——Excel自殺

自殺代碼的放置位置

三、怎麼觸發代碼執行

如果我們直接像上圖以所示,將自殺代碼直接放在Workbook的Open事件中,當文件打開時,文件就直接不見了。但是,現實中肯定不能這樣操作,所以,我們需要設置一些條件,當條件成立時,才執行自殺代碼,條件不成立時,就不執行自殺代碼。

常用的觸發自殺代碼的條件有以下幾種:


1、以日期做判斷:

設定一個日期,當電腦系統日期達到了所設置的日期,就執行自殺代碼。

<code>Private Sub Workbook_Open()
Dim 限制日期 As Date '申明變量
限制日期 = "2020/4/18" '設置限制使用日期,根據自己需要設置

If VBA.Date >= 限制日期 Then '判斷當前系統日期是否到了限制日期
Application.DisplayAlerts = False '禁止顯示提示和警告消息,悄無聲息的刪除文件

Call Killme '執行自殺代碼【Killme:第一部分中段代碼的過程名稱】
End If
End Sub/<code>


2、以打開次數判斷:

對文件打開次數做記錄,當打開次數達到設定的次數時,即執行自殺代碼。

①文件打開次數記錄設置

我們在Sheet1的【A1】單元格中,記錄文件打開的次數,通過工作薄的【BeforeClose】事件判斷。

<code>Private Sub Workbook_BeforeClose(Cancel As Boolean)
'在工作表1的【A1】單元格中記錄文件打開次數
Sheet1.Range("A1") = Sheet1.Range("A1") + 1
ThisWorkbook.Save '保存文件
End Sub/<code>

此處為什麼用【BeforeClose】事件,因為代碼會改變單元格中的內容,如果直接用Open事件,打開時,A1單元格會記錄一個打開次數,但是如果沒有對數據做保存,這個數據累加就無效。

但是文件打開後必定會關閉,在文件關閉前,對打開次數做記錄,就對每次的打開操作做記錄。

會玩失蹤的Excel文件——Excel自殺

以文件打開次數作為判斷條件,執行文件自殺操作,完整代碼如下:

會玩失蹤的Excel文件——Excel自殺


3、以密碼錯誤次數判斷:

比如我們有一個文件,裡面有機密數據,且在文件中設置了登錄窗口,每次打開文件的時候都需要驗證密碼,此時就可以在工作表的某個單元格對密碼錯誤次數錯記錄,一旦密碼錯誤次數達到了設置的值,即觸發文件自殺。

也就是說,如果不知道密碼的人拿到文件,是無法打開文件,就算他測試密碼,一旦密碼錯誤次數過多,文件就自殺,這樣就很好的保護了我們的數據。

會玩失蹤的Excel文件——Excel自殺

以密碼輸入錯誤次數判斷,完整的判斷代碼為:

① 窗體中登錄按鈕的代碼

<code>Private Sub CommandButton1_Click()
If TextBox1.Text = "" Then '密碼輸入框為空時
MsgBox "密碼不能為空!請輸入密碼。", vbOKOnly + vbCritical, "警告"
ElseIf TextBox1.Text <> 111 Then '密碼登錄框密碼錯誤時
Sheet1.Range("A1") = Sheet1.Range("A1") + 1 'A1單元格次數累加
MsgBox "密碼錯誤,請重新輸入。", vbOKOnly + vbCritical, "錯誤" '‘彈出警告
TextBox1.Text = "" '清空密碼登錄框,

'沒出錯一次,就判斷以下A1單元格的值是否達到次數限制的值
If Sheet1.Range("A1") >= 10 Then
Application.DisplayAlerts = False '禁止顯示提示和警告消息,悄無聲息的刪除文件
Call Killme '執行自殺代碼【Killme:第一部分中段代碼的過程名稱】
End If
Else '當密碼正確時
MsgBox "登錄成功!", vbOKOnly + vbInformation, "恭喜"
Unload 登錄
End If
End Sub/<code>

②工作薄打開事件代碼如下:

<code>'工作薄開啟事件
Private Sub Workbook_Open()
Sheet1.Select 'sheet1工作表選中

登錄.Show '顯示登錄窗體
End Sub

'自殺代碼
Sub Killme()
With ThisWorkbook '對當前工作薄
.Saved = True '保存文件
.ChangeFileAccess xlReadOnly '將當前工作簿設為只讀。
Kill.FullName 'Kill:從磁盤中刪除文件;
.Close '關閉Excel
End With
End Sub/<code>

五、小結

本文分享的是自殺代碼,文中講解了自殺代碼的寫法,該怎麼用,在什麼情況西用等問題。

用自殺代碼是一種有風險的操作,雖然可以讓我們的數據免遭洩露,但是也給自身的數據安全帶來隱患,因為一不小心文件就沒了,自己的數據就肯可能找不到了。所以一定要慎用。

當然,Excel既然能自殺,也可以殺其他的文件,這個知識點在這裡就不展開講了,如果別有居心之人利用這種代碼,其後果就會不堪設想。


我是上班下班,因為愛好辦公軟件、喜歡分享。所以來到這裡將我的學習心得和踩過的一些坑,和大家聊聊,希望大家學習我成功的經驗,避開我踩過的坑。我和你們一起進步。

好了,今天就聊到這裡,感謝各位朋友的關注和支持。

如果你喜歡我分享的內容,請點個贊支持下;

如果你覺得我分享的內容對你有幫助,可以關注我;

如果要看我以前分享過的好玩的內容,大家可以去我的主頁查看歷史文章。


分享到:


相關文章: