?? 89.txt
字號(hào):
用VBA限制非注冊(cè)軟件使用時(shí)間
江蘇無(wú)錫市
李激揚(yáng)
---- 對(duì)于共享軟件來(lái)言,在軟件未注冊(cè)時(shí)僅提供有限時(shí)間和有限次數(shù)的使用權(quán)限,當(dāng)超過(guò)使用期限,程序給出提示信息并關(guān)閉程序。在EXCEL中如果你用宏進(jìn)行了兩次開(kāi)發(fā),你希望使此開(kāi)發(fā)程序在時(shí)間和次數(shù)上對(duì)非注冊(cè)用戶有所限制,那么不妨試一下以下方法。
---- 1、在工作簿中新建一工作表,本文命名為"時(shí)間次數(shù)限制"表。
---- 2、在"時(shí)間次數(shù)限制"表單元格IV65536鍵入 = TODAY();在單元格IV65533鍵入1;(可按"Ctrl+向下鍵"即可到IV65536)
---- 3、打開(kāi) Visual Basic 編輯器,在當(dāng)前工作簿新建一模塊,在代碼窗口輸入如下代碼:(可不輸入插入在程序內(nèi)的解釋語(yǔ)句)
Option Explicit
Const Degree As Integer = 30
'Degree 是程序使用次數(shù)的限制常量
Const Time As Integer = 30
'Time 是程序使用時(shí)間的限制常量
Sub auto_open()
//auto_open()程序每次啟動(dòng)時(shí)自動(dòng)運(yùn)行
Dim I As Integer //當(dāng)前程序的使用次數(shù)變量
Dim ThisTime As Long //當(dāng)前程序使用時(shí)間變量
Dim LastTime As Long //上次程序使用時(shí)間變量
Dim Comp As Long //時(shí)間比較變量
ActiveWindow.WindowState = xlMinimized
//最小化當(dāng)前程序窗口
Application.ScreenUpdating = False
//宏執(zhí)行時(shí),屏幕凍結(jié)
Sheets("時(shí)間次數(shù)限制").Visible = xlSheetVisible
//使"時(shí)間次數(shù)限制"表可見(jiàn)
Sheets("時(shí)間次數(shù)限制").Select
I = Sheets("時(shí)間次數(shù)限制").Range("IV65533").Value
//讀取保存在表"時(shí)間次數(shù)限制"中的程序的使用次數(shù)的值
If I = 1 Then
Sheets("時(shí)間次數(shù)限制").Range("IV65536").Select
Selection.Copy
Sheets("時(shí)間次數(shù)限制").Range("IV65535").Select
Selection.PasteSpecial Paste:=xlValues
Sheets("時(shí)間次數(shù)限制").Range("IV65534").Select
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Else
Sheets("時(shí)間次數(shù)限制").Range("IV65536").Select
Selection.Copy
Sheets("時(shí)間次數(shù)限制").Range("IV65535").Select
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
//將單元格IV65536中的當(dāng)前時(shí)間以純數(shù)字形式粘貼至
單元格IV65535
ThisTime = Sheets("時(shí)間次數(shù)限").Range("IV65535")
LastTime = Sheets("時(shí)間次數(shù)限制").Range("IV65534")
Comp = ThisTime - LastTime
If Comp < Time And I < Degree And Comp > -1 Then
Sheets("時(shí)間次數(shù)限制").Range("IV65536").Select
Selection.Copy
Sheets("時(shí)間次數(shù)限制").Range("IV65534").Select
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
//將單元格IV65536中的當(dāng)前時(shí)間
以純數(shù)字形式粘貼至單元格IV65534
Else
//當(dāng)程序在超過(guò)使用期限或使用次數(shù)時(shí)提示用戶,
并關(guān)閉工作簿,退出程序
MsgBox "您已超過(guò)了未注冊(cè)軟件的使用時(shí)間!"
Sheets("時(shí)間次數(shù)限制").Visible=xlSheetVeryHidden
ActiveWorkbook.Close SaveChanges:=False
Exit Sub
End If
End If
I = I + 1
Sheets("時(shí)間次數(shù)限制").Range("IV65533").Value = I
//累加程序使用次數(shù)并回傳至將單元格IV65533
Sheets("時(shí)間次數(shù)限制").Visible = xlSheetVeryHidden
//使"時(shí)間次數(shù)限制"表用戶不可見(jiàn)
ActiveWorkbook.Save
//保存當(dāng)前活動(dòng)工作簿
Application.ScreenUpdating = False
//激活窗口
ActiveWindow.WindowState = xlMaximized
//最大化當(dāng)前程序窗口
End Sub
---- 4、在Visual Basic 編輯器的項(xiàng)目窗口單擊"時(shí)間次數(shù)限制"表, 在屬性窗口中的Visible選擇xlSheetVeryHidden。
---- 5、在Visual Basic 編輯器的項(xiàng)目窗口右鍵點(diǎn)擊VBAProject,選擇VBAProject(屬性)...,在保護(hù)標(biāo)簽中選中"查看時(shí)瑣定工程"并在密碼和確認(rèn)密碼中鍵入8位以上的密碼。(不易被解密軟件破譯)
---- 6、保存本工作簿,退出即可。
---- 從安全的角度分析以上步驟,如果使用者修改系統(tǒng)時(shí)間,將時(shí)間恢復(fù)至安裝軟件之日,由于和最近軟件使用時(shí)間相比為負(fù)值仍不能正常使用,另外對(duì)于使用次數(shù)又有逐次累計(jì)不可能被修改.
---- 如果使用者打開(kāi)程序時(shí)按住"Shift"鍵,阻止auto_open宏的運(yùn)行的話,由于任何一次打開(kāi)程序時(shí),填寫使用次數(shù)和使用時(shí)間變量的工作表都處于" xlSheetVeryHidden"狀態(tài),在此狀態(tài)下不可以從取消隱藏工作表的方法予以顯示工作表,唯一顯示工作表的途徑VBAProject又被加密(一旦解密由于使用次數(shù)和使用時(shí)間變量的單元格位于工作表底端不易被發(fā)現(xiàn)).也不易被使用者修改,更何況在此種狀態(tài)下所有宏程序都將被終止。充分保護(hù)了軟件的使用權(quán)限。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -