管理资源吧

当前位置:首页 >> 资讯 > >> 新闻资讯 >> 电脑教程 > Excel用VBA动态口令保护方法介绍

Excel用VBA动态口令保护方法介绍

刚刚在知乎上看到有位网友提出了一个有趣的问题:想把一个Excel工作簿群发给几个朋友,同时不想其他人能够看到工作簿内容,可否通过VBA实现“动态口令”的效果?比如,2017年4月11日打开这个工作簿,就必须输入口令20170411才能看到内容;而2018年5月12日打开工作簿,就必须输入口令20180512。

对于这个问题,我个人的观点是:用VBA来动态生成密码,本质上就是不完备的。因为用户可以在任何时间禁用excel的运行宏功能,此时VBA将失去作用,无论是生成密码还是保护文件都会失效。

那么假如我们假设用户永远启用VBA,这个问题就可以采用事件编程来解决:

首先,在工作簿中新建一个完全空白的工作表,比如我下面例子中把第一张工作表设置为完全空白,然后希望的效果是:如果用户不能输入正确密码,那么就始终让这张工作表显示在最前面,无法看到后面真正有数据的那几张表。

接下来,运用我们《提高篇》中讲解的事件编程知识,打开VBA工程中“ThisWorkbook”的代码页,写入下面这些代码(我在里面加了注释):

好,现在我们保存工作簿为 .xlsm 文件。然后再次打开时,就是下面的效果了。只要用户输入的密码不正确,就永远无法终止消息框,也就看不到真正的数据表了。

不过这个代码有一个最大的问题,就是一旦用户禁用了宏,那么就可以直接打开工作簿看数据,VBA根本不运行。

怎么解决呢?办法总还是有的,只是实现上要复杂很多。这里提供一个思路:首先,用VBA编写一个加密的私有函数,可以把所有工作表中的重要数据进行加密;然后,再编写一个VBA解密函数。这样,在 workbook_open 中,当用户输入了正确口令后,调用解密代码将所有表格数据解密;而在workbook_close 中,每当关闭时都调用加密代码将所有表格数据加密后再保存退出。最后,将VBA工程进行口令保护,使别人无法看到这些代码。这样,如果用户不启用宏,那么虽然打开工作表也只能看到密文;而一旦启用宏,就必须输入正确口令才可以。除非他找工具破解了VBA Project的口令,然后直接调用运行你的解密函数。

总之还是我最前面讲到的,用VBA动态保护这个工作簿,包括我自己这两种方案在内,都不是无懈可击的,只能是增加破解成本。其实Excel工作簿的口令保护本身也是只是增加了破解成本,真有人想破解的话有很多种方法可以使用。而且楼主想保护的文件是要分发给别人的,所以我们不可能开发系统级程序去修改和扩展别人电脑的Office底层甚至文件系统。所谓凡事皆有定数,我们也不可贪心太多。

上一篇:excel快速填充有规律的数据方法介绍
下一篇:大白菜一键安装还原系统方法
资讯分类:
推荐阅读
猜你喜欢