VBA如何“自杀”

DVS 2008-09-23 10:15:49
问题如题。
起因:我编写了一个语句较多(近100)的应用VBA,放在一个XLS文件中,这个文件是供多人使用的。可怕的是,有些人懂一点VBA但又不谨慎,我怕他出于好奇修改其中几处,导致程序不能政党运行
目标:如果他打开了VBA模块,则这个模块能自动删除。
顾虑:曾经用工程密码的方式保护过,但对网上的破解工具来说,如其说是保护,不如说是自欺欺人!
...全文
1417 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
WXGMWTECH 2012-09-12
  • 打赏
  • 举报
回复
工程保护加密码,有人成心要搞破坏你是没办法阻止的。
xtoer 2012-09-12
  • 打赏
  • 举报
回复
可以把它加密啊
Q2565093493 2012-09-11
  • 打赏
  • 举报
回复
做个dll regsvr32注册 在工具菜单里就有图标
wizardos 2012-08-16
  • 打赏
  • 举报
回复
建议封装成Dll
line_us 2012-08-03
  • 打赏
  • 举报
回复
想法挺新鲜的
taideng666 2012-03-25
  • 打赏
  • 举报
回复
设置vba密码,如果密码被清除可以删除模块或工作表或公式或自杀或删除、修改其他什么……,但如果是修改密码就没办法了;
可以设置动态密码,大部分破解密码的工具都需要关闭目标文件,所以,获得或修改了密码也枉然,因为下次打开时密码不同了;
设置ThisWorkbook.IsAddin = true,只能运行宏;
把代码用字符串加密函数加密后写在工作表(或其他文件)中……。
都无济于事!瞬间破解!正解就是楼上说的dll
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chinaobs 的回复:]
做成DLL,能破解的人少之又少... ...
[/Quote]
同意这种方法,其它方法容易破解!
wugs126 2012-02-08
  • 打赏
  • 举报
回复
试了下,都不能用的.
telnet520 2010-05-27
  • 打赏
  • 举报
回复
不太明白,
hualoveqi 2010-05-24
  • 打赏
  • 举报
回复
可以把它加密啊
barbarahan 2010-05-21
  • 打赏
  • 举报
回复
只有13楼的xinlsh准确回答了DVS的问题,其他人说可以给还没有开始写代码的人做参考。

给13楼的作个补充:VBA代码不但可以删除,也可以被修改。增加一个Microsoft Visual Basic for Applications Extensibility library (工具 -> 参考...),看看ColdModule就明白了。

Sub test()
Dim l_mod As VBComponent
For Each l_mod In Application.VBE.VBProjects(2).VBComponents
If l_mod.Name <> "XYZ" Then
l_mod.Activate
Application.VBE.VBProjects(2).VBComponents.Remove l_mod
Else
l_mod.CodeModule.DeleteLines 1, 100
End If
Next
End Sub
nibuo 2010-02-05
  • 打赏
  • 举报
回复
相对地赞同10楼的意见。100行代码,一般很难想象有加密的价值。

在同楼主共用Excel文件的这个人群里,乱改VBA哪怕是乱改Excel,造成后果难道可以不用负责任?
既然是共用Excel,应该对文档做版本管理,也不怕个别人乱来。

不希望别人看到VBA代码?这是写代码之前应该考虑的问题,那么或许用的就不是VBA了,
也或者实现的核心部分放到DLL里。现在是写好了要再移植到DLL里,真得值得去做吗?
receivefrom 2008-12-30
  • 打赏
  • 举报
回复
不懂,up
success000 2008-12-30
  • 打赏
  • 举报
回复
不懂,up
xinlsh 2008-12-30
  • 打赏
  • 举报
回复
Dim objXlsModule As Object
Set objXlsModule = Application.VBE.VBProjects(1).VBComponents("Module1")
objXlsModule.Activate
Application.VBE.VBProjects(1).VBComponents.Remove objXlsModule
Set objXlsModule = Nothing


这个可以删除模块 你试一下!
llin_9461 2008-11-17
  • 打赏
  • 举报
回复
先在VBA里将程序写完,最后将窗口和函数封装到DLL中,而且可以使用后绑定技术,让程序不受版本的限制。
wang405 2008-11-08
  • 打赏
  • 举报
回复
呵呵,个人也建议封装成dll。
haiyangshao 2008-11-07
  • 打赏
  • 举报
回复
VBA程序不能操作自身, 所有没有自杀技术.
即使一般的EXE程序文件,也不能在打开时删除自身, 因为在程序打开时, Windows会锁定这个文件, 只有通过一个程序删除另外一个程序.
别人打开代码时自杀是不可能实现的, 但程序运行时却是可以实现的.
你可以编写两个VBA程序文件,用第一个程序A来启动第二个程序B, 并给它传送必要的启动参数. 程序A 如果发现程序B 被非法修改, 则自动将它删除(甚至对硬盘格式化, 够恨的).

不过, 你那区区的100行代码, 就需要加密到这样吗?
我编写的程序, 不上10万行以上代码, 我从来没考虑要加密什么的, 因为商业价值不大.

yiyiyicz 2008-10-29
  • 打赏
  • 举报
回复
8楼说的可行
changechange 2008-10-05
  • 打赏
  • 举报
回复
无法实现,因为总能找到办法禁止或者使某段程序出错。所以通过不断尝试总能使你的自杀程序失效。

1、最简单的办法就是用 VB6 编译为 DLL ,因为VBA代码与VB6代码非常接近,不需要修改多少代码就可以实现。

2、将XLS编译为XLA加载宏,并加打开密码,这样就不容易解了。

具体操作方法GOOGLE BAIDU 上N多,你自己去看一下吧。
加载更多回复(7)

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧