使用VBA实现Excel自杀功能

曾经看到过一个“Excel-Home”出品的“关于Excel自杀功能”的视频教程,经认真学习后,我写下了自己的代码,分享于此。



实现思路:

使用VBA创建一个隐藏的名称,记录当前工作簿打开的次数,如果次数超过指定数值,则自动删除本工作簿。



应用范围:

1、用于VBA开发时,发给别人测试某功能(因测试版,不应发放到外部,所以添加自删除功能)。

2、出于其它原因,需要限定用户使用次数的。



事件代码(ThisWorkbook):

在Excel打开时判断是否需要读取运行次数。(首先判断用户名称,避免调试时,删掉自己的“劳动成果”)

Private Sub Workbook_Open()
    If Application.UserName <> "Name" Then
        Call ReadOpenCount
        ThisWorkbook.Save
    End If
End Sub

过程代码(模块):

1、添加一个隐藏的名称,用于记录打开的次数。

Sub AddHiddenNames()
    ThisWorkbook.Names.Add Name:="OpenCount", Visible:=False, RefersTo:="=0"
End Sub

2、读取工作簿已经打开的次数,如果达到次数"自杀",未达到"次数"+1。(本段代码,定义的是3次)

Sub ReadOpenCount()
    Dim iCount As Byte
    iCount = Evaluate(ThisWorkbook.Names("OpenCount").RefersTo)
    iCount = iCount + 1
    If iCount > 3 Then
        Call KillThisWorkBook
        Else
        ThisWorkbook.Names("OpenCount").RefersTo = "=" & iCount
    End If
End Sub

3、实现“自杀”功能,但是不提示用户。

Sub KillThisWorkBook()
    With ThisWorkbook
        .Saved = True
        .ChangeFileAccess xlReadOnly
        Kill .FullName
        .Close
    End With
End Sub

虽然上述代码执行后,能得到预期的结果,但是别忘了,“宏”是可以被禁用的,甚至有的用户根本不知道该如何“启用宏”,这就不在本文记述的范围之内了。

时间: 2024-12-20 13:57:05

使用VBA实现Excel自杀功能的相关文章

个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第12波-快速生成、读取、导出条形码二维码

根据指定的内容生成对应的条形码或二维码,在如今移动互联网时代,并不是一件什么新鲜事,随便百度一下,都能找到好多的软件或在线网站可以帮我们做到,但细想一下,如果很偶然地只是生成一个两这样的图形,百度一下找个在线网站生成一下下载到本地,再复制粘贴一下,并不是什么多大问题的事情,但如果要批量处理,又如何呢?如果生成的二维码条形码,先进行排版一下打印出来,类似一个个标签或用作相应的产品说明的一部分,那又是怎样一种现成的解决方案呢?本次Excel催化剂再次刷新大家对Excel的认识,所有大家想做的事情,全

个人永久性免费-Excel催化剂功能第20波-Excel与Sqlserver零门槛交互-数据上传篇

Excel作为众多数据存储的交换介质,在不同的系统内的数据很少可以很连贯地进行整合分析,一般的业务系统都会提供导出Excel作为标配功能供用户使用系统内生成的数据. 此时最大的问题是,Excel很维去成为各个数据源的整合方,其数据存储能力和运算能力一直是众多深度Excel用户们一大头痛的事情,当数据量一大,做什么操作都会慢下来. 今天Excel催化剂将给大家带来全新的解决方案,Excel与Sqlserver深度集成,在Excel上的数据源能轻松上传至Sqlserver中,实现以Sqlserver

个人永久性免费-Excel催化剂功能第19波-Excel与Sqlserver零门槛交互-查询篇

对频繁使用Excel的高级应用的尝试用户来说,绕不过的一个问题Excel的性能问题,对于几万条数据还说得过去,上了10万行的数据量,随便一个函数公式的运算都是一个不小的负荷,有些上进一点的用户会往Access桌面数据库去进深,试图通过一些数据库的技术解决下数据性能问题. 但毕竟要学习SQL查询,学习许多数据库的技术,也把许多人挡在通往美妙的数据之旅上.而且另一问题是Access其实也是很鸡肋的一个东西,特别是它的SQL语法支持和多人共享查询上. [Excel催化剂]拿出私藏很久的秘密武器,老规距

个人永久性免费-Excel催化剂功能第21波-Excel与Sqlserver零门槛交互-执行SQL语句篇

在前两波中,已完成了Excel与Sqlserver的查询和上传功能,但难免许多临时的或更深入地操作数据库需要用Sql语句来操作,对一般用户电脑里,不可能有条件轻易安装一个数据库客户端软件,就算安装了对其中烦多的功能操作也不胜任. 开发一个简单的接受SQL语句对数据库进行访问操作就有点必要,当然这个落脚点放到Excel上是很不错的选择,毕竟所有用户电脑都有安装Excel. 并且在Excel上批量构造SQL语句也是容易的事,若有数据需要从数据库中导出,Excel作为装载小量数据并进行后续分析的容器是

个人永久性免费-Excel催化剂功能第50波-批量打印、导出PDF、双面打印功能

在倡导无纸化办公的今天,是否打印是一个碍眼的功能呢,某些时候的确是,但对于数据的留存,在现在鼓吹区块链技术的今天,仍然不失它的核心价值,数据报表.单据打印出来留存,仍然是一种不可或缺的数据存档和防篡改功能.听说Excel最好用的功能是打印功能,在此谨借第50波功能的重大里程碑,献给打印这一最古老且长存的功能,推出批量打印功能. 视频演示 Excel催化剂已正式在千聊上发布视频,如查阅文章有理解障碍,不妨查看下视频,视频不定期更新,内容丰富,干货满满,有术亦有道! 推广期间有砍价购活动,白菜价59

个人永久性免费-Excel催化剂功能第53波-无比期待的合并工作薄功能

合并工作薄.工作表功能,几乎每一款Excel插件都提供,而且系列衍生功能甚至有多达10多个.今天Excel催化剂重拾武器,在现有众多插件没提供到位的部分场景中,给予支持和补充,做到人有我优,人无我有的境地,重新定义怎样才算是一个精品级功能. 背景介绍 Excel催化剂一直留空没开发工作薄功能,并非因其太复杂或无需求.正是因为需求很大,而现有的插件都有提供. 最重要的是连微软官方都提供了此功能,使用PowerQuery的ETL功能,无论从易用性还是功能强大性来说,秒杀市面一切的第3方开发的功能.

利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能

我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序 HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据,难免会含有方便操作的 主键ID这列的记录.现在项目需要在easyUI的DataGrid中显示的数据能全部导出Excel,包括DataGrid中的中文标题,其他的统统不 要. 完成该功能所需的工具和环境:Newtonsoft.Json序列化和反序列化类库.easyUI前端UI框架.HttpHandl

excel导出功能优化

先说说优化前,怎么做EXCEL导出功能的: 1. 先定义一个VO类,类中的字段按照EXCEL的顺序定义,并且该类只能用于EXCEL导出使用,不能随便修改. 2. 将查询到的结果集循环写入到这个VO类中. 3. 将这个VO类的数据集写入到EXCEL中. 缺点: 1.每次做一个功能的excel导出需要定义一个vo类,并且vo类不可随便变更. 2. 从数据库查询到结果集不能直接输出到excel,需要二次遍历写入到vo中. 3. excel导出的顺序必须与vo定义的字段顺序一致,并且输出vo中所有的字段

写了一个Windows API Viewer,提供VBA语句的导出功能。提供两万多个API的MSDN链接查询

世面上的API Viewer已经不少了,但给VBA用的几乎没有.我自己写了一个Windows API Viewer,提供VBA语句的导出功能,并可以提供两万多个API的MSDN链接查询. 环境需求:Windows 7.1 SP1及以上操作系统,安装.Net 4.5.2及以上框架. 下载地址:API Viewer v1.1 下载