煙火 syrjldd
Excel函數(shù)|VBA交流①群
請教:有沒有VBA使用次數(shù)達(dá)到100次自殺的代碼?
答案:有
分為幾種方法,先說一下最簡單的。
Private Sub workbook_open()
Rem ***************************
Rem 功 能: 定時自毀
Rem 歡迎關(guān)注公眾號:VBA說
Rem ***************************
On Error Resume Next
Application.DisplayAlerts = False
If Now() >= CDate("12/26/2020 10:22:00") Then
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
Application.Quit
End If
Application.DisplayAlerts = Ture
End Sub
把這段代碼放到工作簿事件里,就可以了。
最后文件到期的話,效果是這樣的,打開就自動刪除自己了。
這種方法對于VBA小白來說,足夠了
這種方法,直接將工作簿使用次數(shù)記錄在注冊表中,每次打開工作簿就讀取注冊表中的數(shù)據(jù)。獲取已使用次數(shù)。
Private Sub Workbook_Open()
Dim counter As Long, term As Long, chk
chk = GetSetting("hhh", "budget", "使用次數(shù)", "")
If chk = "" Then
term = 50 '限制使用50次
MsgBox "本工作簿只能使用" & term & "次" & vbCrLf & "超過次數(shù)將自動銷毀!", vbExclamation
SaveSetting "hhh", "budget", "使用次數(shù)", term '將值寫入注冊表
Else
counter = Val(chk) - 1 '計(jì)算剩余使用次數(shù)
MsgBox "你還能使用" & counter & "次,請及時注冊!", vbExclamation
SaveSetting "hhh", "budget", "使用次數(shù)", counter '寫入剩余次數(shù)
If counter <= 0 Then '如果使用次數(shù)用完,就刪除注冊表記錄使用次數(shù)的信息,調(diào)用自毀代碼
DeleteSetting "hhh", "budget", "使用次數(shù)"
killme
End If
End If
End Sub
Public Sub killme()
Application.DisplayAlerts = False
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ThisWorkbook.Close False
End Sub
我們可以看到,隱藏的很深,除非使用者手動刪除注冊表項(xiàng)。
我們假定,使用者比較聰明,換了臺電腦試了試,發(fā)現(xiàn)可以使用了,那就讓他多用幾次吧。
其實(shí)可以獲取電腦的cpu序列號、硬盤ID等等標(biāo)識符來判別是不是換了新機(jī)子,這里不做深入研究。
▼
一頓操作猛如虎,有人想說,直接把核心代碼砍掉就gg了(我想說,大哥,給個更文表現(xiàn)的機(jī)會好不好。)
其實(shí)我們做這一堆的前提是給不會VBA的小白設(shè)置的陷阱。
Kill語句
用法:Kill 文件路徑
需要注意的是,文件在使用狀態(tài)下無法直接使用Kill。我們加了一句ChangeFileAccess xlReadOnly,這一條代表把文件設(shè)置成只讀,設(shè)置成只讀后,文件才不是使用狀態(tài),才能執(zhí)行刪除動作。
學(xué)而時習(xí)之不亦說乎,下面的歷史文章可以再翻看一下。