如何保护VBA作品

来源:互联网 发布:下载命中双色球软件 编辑:程序博客网 时间:2024/04/28 05:39

一、为VBA工程设置密码


1、按Alt+F11,在VBE窗口中,单击“工具->VBAproject属性”,打开“VBAproject属性”对话框。

 


2、单击“VBAproject属性”对话框中的“保护”选项卡。选中“查看时锁定工程”复选框。在“密码”框中输入保护密码,在“确认密码”框中再输入一次密码,然后单击“确定”,关闭“VBAproject属性”对话框。

 

 
3、保存并关闭工作簿。
当你再打开该工作簿后,打开VBE窗口时,就不再显示VBA的窗体、模块等对象,看不到VBA源代码了。
★提示:这种密码保护很容易破解。★

 

 

二、设置工程不可查看(在实际操作中最后完成此项)


限制别人查看VBA源代码的方法就是设置“工程不可查看”。方法如下:
共享级锁定:先对Excel文件的“VBAProject工程”进行密码保护(参考“一、为VBA工程设置密码”)。再打开要保护的文件,单击“工具->保护->保护并共享工作簿->以追踪修订方式共享”,输入保护密码再保存文件。当你得新打开“VBAProject”工程属性时,就将会提示:“工程不可看!”
 
 

 


破坏型锁定:用16进制编辑工具(如WinHex等)打开Excel文件,查找定位以下地方: ID="{00000000-0000-0000-0000-000000000000}"(注:在打开的文件中用Ctrl+F查找即可。实际显示不会全部为0),此时,你只要将其中的字节随便修改一下即可。
★提示:在修改前最好做好文档备份。当然这种方法也可破解的。★

 

三、防止强制中断方式查看VBA代码


有时,我们可以通过运行程序,然后在运行的过程中强制按“Ctrl+Break”强制中断程序运行,进VBE编辑器查看源码。为此,我们可以在Workbook的open事件中加入以下语句来屏蔽“Ctrl+Break”组合键。
Application.EnableCancelKey = xlDisabled
如果要恢复“Ctrl+Break”组合键,则用下面的语句。
Application.EnableCancelKey = xlInterrupt
完成后代码如下:
Option Explicit
Private Sub Workbook_Open()
    Application.EnableCancelKey = xlDisabled
End Sub

 

四、禁用宏则关闭Excel文件


当打开含有宏的文件时,如果“禁用宏”并打开文件后,所有编辑的VBA程序将失效。
我们可以通过调用Excel4.0版(Excel的一个老版本)的宏命令来解决这个问题。因为“禁用宏”功能无法禁用4.0版本的宏。


设置步骤和使用方法:
1.利用Excel 4.0宏表來定义宏函数。在工作表工具列按右键→插入→Excel 4.0 宏表。
 
 

 


在新建的Macro1中输入以下內容:
=ERROR(FALSE)
=IF(ERROR.TYPE(RUN("TestMacro"))=4)
=ALERT("因停用了Macro,文档即将关闭!",3)
=FILE.CLOSE(FALSE)
=END.IF()
=RETURN()

 

 

 

2.在VBAProject新增一个Module,键入以下內容:
 


Option Explicit
'为每个表定义隐藏名称
Sub AddPrivateNames()
    Dim sht As Worksheet
    '列舉
    For Each sht In Worksheets
        '为每一个工作表指定"宏表位置"
        ThisWorkbook.Names.Add sht.Name & "!Auto_Activate", "=Macro1!$A$1", False
    Next
End Sub

Sub HideMacroSheet()
    '隐藏宏表
    ThisWorkbook.Excel4MacroSheets(1).Visible = xlSheetHidden
End Sub

3.在Workbook的open事件中调用HideMacroSheet、AddPrivateNames方法
Option Explicit
Private Sub Workbook_Open()
    HideMacroSheet
    AddPrivateNames
End Sub

 


4.完成后就存档、关闭,然后再开一次刚刚储存的档案,记得至少要过行过一次宏让刚刚设定的程序生效,然后再存一次档。
 


5.如果使用者不用宏,页面将会退出。
 


6.此功能在Excel 2003测试成功

 

 

五、限制工作簿的使用次数,超过次数就自我删除


限制工作簿的使用次数,超过次数就自我删除,也不失为保护作品的一种好方法。但这种方法需要修改注册表。
有关程序的代码如下:
Private Sub Workbook_Open()
Dim counter As Long, term As Long, chk
chk = GetSetting("hhh", "budget", "使用次数", "")
If chk = "" Then
term = 2 '限制使用2次
MsgBox "本工作簿只能使用" & term & "次" & vbCrLf & "超过次数将自动销毁!", vbExclamation
SaveSetting "hhh", "budget", "使用次数", term
Else
counter = Val(chk) - 1
MsgBox "你还能使用" & counter & "次,请及时注册!", vbExclamation
SaveSetting "hhh", "budget", "使用次数", counter
If counter <= 0 Then
DeleteSetting "hhh", "budget", "使用次数"
killme
End If
End If
End Sub

Public Sub killme()
Application.DisplayAlerts = False
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ThisWorkbook.Close False
End Sub
将上述程序复制到工作簿的ThisWorkbook对象模块中,保存文件即可。
★提示:使用该方法也可以限制工作簿的使用时间

 

原创粉丝点击