ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 63695|回复: 123

[分享] 如何保护好您的作品!!!!!

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-6-8 11:26 | 显示全部楼层 |阅读模式
当你辛辛苦苦开发出的程序作品后,是不是想过怎样来保护好程序的源代码呢!,保护好程序源码,在大多会员来看都是非常关心的问题.遗憾的是,Excel不像其他的开发软件一样,在加密上很容易被各种密码破解软件破译.尽管这样,我们也应尽可能来保护Excel工作簿和VBA源码。
一、为VBA工程设置密码
限制别人查看VBA源代码的一个简单办法就是设置VBA工程密码或设置工程不可查看。方法如下:
1、按Alt+F11,在VBE窗口在,单击“工具—VBAproject属性”,打开“VBAproject属性”对话框。
2、单击“VBAproject属性”对话框中的“保护”选项卡。如图1所示,选中“查看时锁定工程”复选框。在“密码”框中输入保护密码,在“确认密码”框中再输入一次密码,然后单击“确定”,关闭“VBAproject属性”对话框。
1.JPG
3、保存并关闭工作簿。
当你再打开该工作簿后,打开VBE窗口时,就不再显示VBA的窗体、模块等对象,看不到VBA源代码了。
★提示:这种密码保护很容易破解。★
二、设置工程不可查看
限制别人查看VBA源代码的方法就是设置“工程不可查看”。方法如下:
共享级锁定:先对Excel文件的“VBAProject工程”进行密码保护(参考“为VBA工程设置密码”)。再打开要保护的文件,单击“工具_保护_保护并共享工作簿_以追踪修订方式共享”,如图2所示,输入保护密码再保存文件。当你得新打开“VBAProject”工程属性时,就将会提示:“工程不可看!”
2.JPG
破坏型锁定:用16进制编辑工具(如WinHex等)打开Excel文件,查找定位以下地方: ID="{00000000-0000-0000-0000-000000000000}"(注:实际显示不会全部为0),此时,你只要将其中的字节随便修改一下即可。
★提示:在修改前最好做好你的文档备份。当然这种方法也可破解的,因为加密总是相对。★
三、防止强制中断方式查看VBA代码
有时,我们可以通过运行程序,然后在运行的过程中强制按“Ctrl+Break”强制中断程序运行,进VBE编辑器查看源码。为此,我们可以在工作簿的open事件中加入以下语句来屏蔽“Ctrl+Break”组合键。
Application.EnableCancelKey = xlDisabled
如果要恢复“Ctrl+Break”组合键,则用下面的语句。
Application.EnableCancelKey = xlInterrupt

四、禁用宏则关闭Excel文件
当打开含有宏的文件时,如果“禁用宏”并打开文件后,所有编辑的VBA程序将失效。如何当用户打开Excel文件并禁用宏时,让文件自动关闭呢?
我们可以通过调用Excel4.0版(Excel的一个老版本)的宏命令来解决这个问题。因为“禁用宏”功能无法禁用4.0版本的宏。当您设置完成,再打开文件并点击禁用宏时,系统就会弹如下图所示提示信息,单击“确定”后文件就会自动关闭。
3.JPG
禁用宏后的提示信息
设置步骤和使用方法:
(1)打开要设置的文件,在VBE编辑器中添加一个模块。写入以下代码:
Function NoRunMacro ()   ’A3单元格中的字符
End Function
(2)在任一个工作表标签上单元格右键,执行“插入”命令打开如下图所示对话框,在常用选项卡中选取“MS Excel4.0宏表”项,然后单击“确定”按钮,在当前工作簿中就会新建一个默认名Macro1的“宏表”,更改表名为“宏表1”

4.JPG

在宏表的以下单元格中输入公式:
6.JPG

(3)逐个选取工作簿中其他工作表,然后执行【插入】/【名称】/【定义】命令,打开【定义名称】对话框。在“在当前工作簿中的名称”框中输入:工作表名称+Auto_Activate。如下图所示在Sheet1工作表中打开【定义名称】对话框,定义的名称就为:Sheet1!Auto_Activate。
然后在引用位置文本框中输入:=宏表1!$A$2。
5.JPG
★提示:对于一个工作表数量较多的工作表逐个设置会很麻烦。所以这时可以只需为其中一个设置名称,但要保障“当打开工作簿时,必需是设置名称的工作表处于选取状态”★
五、限制工作簿的使用次数,超过次数就自我删除
限制工作簿的使用次数,超过次数就自我删除,也不失为保护作品的一种好方法。但这种方法需要修改注册表。
有关程序的代码如下:
Private Sub Workbook_Open()
Dim counter As Long, term As Long, chk
chk = GetSetting("hhh", "budget", "使用次数", "")
If chk = "" Then
term = 50 '限制使用50次
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对象模块中,保存文件即可。
★提示:使用该方法也可以限制工作簿的使用时间

[ 本帖最后由 987654321 于 2009-6-8 11:58 编辑 ]

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-8 11:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
天下为公
分享不是很好吗?
再说了 破密码又不是很难的事

TA的精华主题

TA的得分主题

发表于 2009-6-8 11:41 | 显示全部楼层
好资料!谢谢楼主的无私奉献!

TA的精华主题

TA的得分主题

发表于 2009-6-8 11:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-6-8 11:49 | 显示全部楼层
在EH这个大家庭,大家是共同学习、共同进步的,在这里代码应该开放
在平时,有些程序是可以卖点钱的,属于自己的知识产权,卖的只是使用权,那加密也是必须的。
我也希望有更好的加密方法,最好是永远不能破解的,呵呵……

TA的精华主题

TA的得分主题

发表于 2009-6-8 11:54 | 显示全部楼层
EXCEL的加密很脆弱啊,很容易就破掉了
这些方法只能针对不懂VBA和破解的人

不过楼主整理的不错,赞一个

TA的精华主题

TA的得分主题

发表于 2009-6-8 11:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-6-8 12:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
很好,谢谢,学习。很实用快捷的保护方法总结。

TA的精华主题

TA的得分主题

发表于 2009-6-9 17:18 | 显示全部楼层
要是有个好的 加密 方法就好了,excel 这方面太弱了,弄得我都感觉加密没啥意思了。

TA的精华主题

TA的得分主题

发表于 2009-6-10 09:49 | 显示全部楼层

回复 1楼 987654321 的帖子

用VB、VC、C++封装成Dll,才是最佳选择!!!!!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 00:49 , Processed in 0.047262 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表