如何为VBA模块代码或.xlam加载项设置90天试用到期机制?
加载项版90天试用功能实现方案
核心思路
加载项是全局生效的工具,不能像普通工作簿那样把试用信息存在单个文件里。我们需要把首次运行日期存储在加载项自身的隐藏命名区域(和加载项绑定,无需额外权限)或Windows注册表(跨加载项重装仍保留记录),确保用户在任意工作簿使用加载项时,都能统一验证试用期。
实现代码(加载项ThisWorkbook模块)
直接在加载项的ThisWorkbook模块中编写启动触发逻辑,Excel启动加载该加载项时自动执行:
Private Const NUM_DAYS_UNTIL_EXPIRATION = 90 Private Const TRIAL_PASSWORD = "123" ' 可自行修改试用密码 Private Sub Workbook_Open() Dim inputPwd As String Dim expDate As Date Dim isFirstRun As Boolean ' 密码验证环节 inputPwd = InputBox("请输入加载项试用密码,试用期限为" & NUM_DAYS_UNTIL_EXPIRATION & "天。") If inputPwd <> TRIAL_PASSWORD Then MsgBox "密码错误,加载项将退出。", vbCritical ' 禁用加载项并退出Excel(可根据需求调整) Application.AddIns(Me.Name).Installed = False Application.Quit Exit Sub End If ' 读取已存储的到期日期 isFirstRun = False On Error Resume Next expDate = CDate(Mid(Me.Names("AddInExpDate").Value, 2)) If Err.Number <> 0 Then isFirstRun = True Err.Clear End On Error GoTo 0 ' 首次运行:计算并存储到期日期 If isFirstRun Then expDate = DateAdd("d", NUM_DAYS_UNTIL_EXPIRATION, Date) ' 在加载项中创建隐藏命名区域保存日期 Me.Names.Add Name:="AddInExpDate", RefersTo:=Format(expDate, "Short Date"), Visible:=False Me.Save ' 保存加载项的修改 MsgBox "加载项首次激活,试用期至" & Format(expDate, "yyyy年mm月dd日") & "。", vbInformation End If ' 检查试用期是否到期 If Date > expDate Then MsgBox "加载项试用期限已到期,请购买正式版。", vbCritical ' 禁用加载项 Application.AddIns(Me.Name).Installed = False ' 可选:直接退出Excel ' Application.Quit End If End Sub
补充说明
1. 存储方式可选方案
- 加载项自身存储:上述代码采用的方式,优点是无需注册表权限,加载项删除后试用记录自动清除,适合单次试用场景;
- 注册表存储:如果需要用户重装加载项仍保留试用记录,可替换日期读写逻辑为:
该方式会写入' 读取注册表中的到期日期 expDate = GetSetting("MyExcelAddIn", "Trial", "ExpDate", "") If expDate = "" Then ' 首次运行,写入注册表 expDate = DateAdd("d", NUM_DAYS_UNTIL_EXPIRATION, Date) SaveSetting "MyExcelAddIn", "Trial", "ExpDate", Format(expDate, "Short Date") End IfHKEY_CURRENT_USER\Software\VB and VBA Program Settings路径,无需管理员权限。
2. 安全与体验优化
- VBA代码易被反编译,若需提升安全性,可将密码验证、日期校验等核心逻辑封装到DLL,或使用VBA混淆工具;
- 可添加到期预警:当
Date >= expDate - 3时,弹出“试用期即将结束”的提示; - 若不想每次启动Excel都输入密码,可在注册表中存储“已验证状态”,仅首次运行或到期后要求输入密码。
内容的提问来源于stack exchange,提问作者Joshua Kilian
相关产品推荐
相关产品推荐

