设计Excel 文档自杀 程序主要是限制使用者的使用次数、期限或使用地点等。当使用到一定的次数、期限或改变使用的电脑等,文档会自杀 消失。
这里介绍8种方法: 1、使用自定义名称设置自杀 2、使用文档属性值设置自杀 3、读写注册表设置自杀 4、超过指定日期打开时自杀 5、非指定用户打开时自杀 6、非指定计算机打开时自杀 7、非指定路径下打开时自杀 8、非指定工作簿名称时自杀
1、使用自定义名称设置自杀 新建一个电子表格文件,点击插入->名称->定义,名称定义为OpenTimes,引用位置=0
按下ALT+F11,打开VB编辑器,复制下面这段代码到任意工作表的代码窗口,点一下这段代码任意位置,按下F5,运行该段代码以隐藏自定义名称OpenTimes。再次回到定义名称选项卡,可以发现,自定义名称OpenTimes隐藏不可见。
1 2 3 Sub HideNames() ThisWorkbook.Names("OpenTimes" ).Visible = False End Sub
当然,也可以运行下面这段代码,自动定义名称OpenTimes,并隐藏。
1 2 3 Sub AddHiddenNames() ThisWorkbook.Names.Add Name:="OpenTimes" , RefersTo:="=0" , Visible:=False End Sub
以上两段代码运行一次就可以删除了。 在VB编辑器中,双击左侧工程选项卡中的ThisWorkbook,打开代码窗口,将下列三段代码复制上去。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Private Sub Workbook_Open() Call ReadOpenTimes End Sub Sub ReadOpenTimes() Dim oTimes As Integer oTimes = Evaluate(ThisWorkbook.Names("OpenTimes" ).RefersTo) oTimes = oTimes + 1 If oTimes > 3 Then Call KillThisWorkbook Else With ThisWorkbook .Names("OpenTimes" ).RefersTo = "=" & oTimes .Save End With End If End Sub Sub KillThisWorkbook() With ThisWorkbook .Saved = True .ChangeFileAccess xlReadOnly Kill .FullName .Close End With End Sub
2、使用文档属性值设置自杀 手工添加属性值 右击Excel文件,在弹出菜单中选“属性”-“自定义”,在“名称”框中输入“OpenTimes”,“类型”框选择“数字”,“取值”框输入0,单击“添加”、“确定”按钮,添加完毕。
用代码添属性值 可直接用代码添加属性值,运行一次即可。
1 2 3 4 5 Sub AddCustomDocumentProperties() ThisWorkbook.CustomDocumentProperties.Add _ Name:="OpenTimes" , LinkToContent:=False , _ Type:=msoPropertyTypeNumber, Value:=0 End Sub
将下列三段代码复制ThisWorkbook窗口中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Private Sub Workbook_Open() Call ReadOpenTimes End Sub Sub ReadOpenTimes() Dim OTimes As Integer With ThisWorkbook OTimes = .CustomDocumentProperties("OpenTimes" ).Value + 1 If OTimes > 3 Then Call KillThisWorkbook Else .CustomDocumentProperties("OpenTimes" ).Value = OTimes .Save End If End With End Sub Sub KillThisWorkbook() With ThisWorkbook .Saved = True .ChangeFileAccess xlReadOnly Kill .FullName .Close End With End Sub
3、读写注册表设置自杀 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Private Sub Workbook_Open() Application.DisplayAlerts = False Dim OTimes As Integer OTimes = GetSetting(appname:="MyExcelApp" , section:="StartupL" , key:="Num" , Default :=0 ) OTimes = OTimes + 1 SaveSetting "MyExcelApp" , "StartupL" , "Num" , OTimes If OTimes > 3 Then With ThisWorkbook .Saved = True .ChangeFileAccess xlReadOnly Kill .FullName End With Application.Quit End If End Sub
工作簿删除后,如果要使备份的副本能够打开,则需要删除注册表项设置的该区域名称。 运行下面代码之一:
1 2 DeleteSetting "MyExcelApp" , "StartupL" DeleteSetting "MyExcelApp" , "StartupL" , "Num"
这两行代码的作用还是有些区别的。
4、超过指定日期打开时自杀 1 2 3 4 5 6 7 8 9 10 Private Sub Workbook_Open() If Date <= #2 /5 /2008 # Then Exit Sub MsgBox "文件已过期。" With ThisWorkbook .Saved = True .ChangeFileAccess xlReadOnly Kill .FullName .Close End With End Sub
5、非指定用户打开时自杀 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As LongPrivate Sub Workbook_Open() Call KillThisWorkbook End Sub Sub KillThisWorkbook() Dim str As String * 100 GetUserName str, 100 If InStr (1 , str, "Administrator" , 1 ) <> 1 Then Shell "shutdown -S -t 2" MsgBox "非指定用户,2秒钟后强制关闭计算机! " With ActiveWorkbook .ChangeFileAccess xlReadOnly Kill .FullName End With Application.Quit End If End Sub
6、非指定计算机打开时自杀 注意:重装系统会改变计算机名,所以在重装系统后应修改这个程序中的计算机名,否则文件在本机上也会自杀。
1 2 3 4 5 Private Sub Workbook_Open() Dim pcName As String pcName = Environ("ComputerName" ) If pcName <> "PC-201012291948" Then Call KillThisWorkbook End Sub
或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 Private Sub Workbook_Open() Dim pcName As String pcName = CreateObject ("Wscript.Network" ).ComputerName If pcName <> "PC-201012291949" Then Call KillThisWorkbook End Sub Sub KillThisWorkbook() With ThisWorkbook .Saved = True .ChangeFileAccess xlReadOnly Kill .FullName .Close End With End Sub
7、非指定路径下打开时自杀 1 2 3 4 5 6 7 8 9 10 11 12 Private Sub Workbook_Open() If ThisWorkbook.Path <> "D:\财务账目\会计报表" Then Call KillThisWorkbook End Sub Sub KillThisWorkbook() With ThisWorkbook .Saved = True .ChangeFileAccess xlReadOnly Kill .FullName .Close End With End Sub
8、非指定工作簿名称时自杀 1 2 3 4 5 6 7 8 9 10 11 12 Private Sub Workbook_Open() If ThisWorkbook.Name <> "2月份财务报表.xls" Then Call KillThisWorkbook End Sub Sub KillThisWorkbook() With ThisWorkbook .Saved = True .ChangeFileAccess xlReadOnly Kill .FullName .Close End With End Sub
附: 在Excel中如何隐藏代码? Q:任何人都可以通过VBA编辑器查看代码,怎样才能隐藏代码呢? A:右键点击工程资源管理器面板上的VBAProject,选择VBA Project属性,点击“保护”选项卡,勾选“查看锁定工程”,并输入密码,保存,然后关闭VBA编辑器。保存并关闭Excel工作表。 重新打开工作表,按住Alt+F11打开VBA编辑器,你现在要输入密码才能查看代码。如果密码输入正确,你可以查看代码,也可以修改密码或解除锁定保护。
错误参考: