You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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 If
    
    该方式会写入HKEY_CURRENT_USER\Software\VB and VBA Program Settings路径,无需管理员权限。

2. 安全与体验优化

  • VBA代码易被反编译,若需提升安全性,可将密码验证、日期校验等核心逻辑封装到DLL,或使用VBA混淆工具;
  • 可添加到期预警:当Date >= expDate - 3时,弹出“试用期即将结束”的提示;
  • 若不想每次启动Excel都输入密码,可在注册表中存储“已验证状态”,仅首次运行或到期后要求输入密码。

内容的提问来源于stack exchange,提问作者Joshua Kilian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:30:44