如何确保用户使用最新版Excel宏工作簿,禁止旧版本上传数据到数据库
VBA拦截旧版本Excel工作簿上传实现方案
完全可以通过VBA实现旧版本上传拦截,核心逻辑是给工作簿增加版本标识,在上传入口增加版本校验规则,不符合要求直接终止流程,具体实现步骤如下:
1. 定义版本常量
首先在VBA编辑器的标准模块顶部声明两个全局常量,每次发布新版本后同步调整版本号和最低允许版本即可:
' 当前工作簿的版本号,每次发布更新时递增 Public Const CURRENT_WB_VERSION As String = "2.1.0" ' 允许执行上传操作的最低版本,低于该版本的工作簿会被拦截 Public Const MIN_ALLOWED_VERSION As String = "2.0.0"
2. 编写版本校验函数
为避免字符串直接比对版本号出现误差,编写专门的分段版本比对函数:
Function IsVersionAllowed() As Boolean Dim currentVerArr() As String, minVerArr() As String Dim index As Integer ' 按点分割版本号为数组 currentVerArr = Split(CURRENT_WB_VERSION, ".") minVerArr = Split(MIN_ALLOWED_VERSION, ".") ' 逐段比对版本号数字 For index = 0 To UBound(minVerArr) If CInt(currentVerArr(index)) < CInt(minVerArr(index)) Then IsVersionAllowed = False Exit Function ElseIf CInt(currentVerArr(index)) > CInt(minVerArr(index)) Then IsVersionAllowed = True Exit Function End If Next index ' 所有版本段一致则符合要求 IsVersionAllowed = True End Function
3. 在上传逻辑入口增加校验
在调用REST API的上传函数最开头插入校验逻辑,不通过直接终止操作并提示用户更新:
Sub UploadDataToServer() ' 优先执行版本校验 If IsVersionAllowed() = False Then MsgBox "当前工作簿版本已过时,请前往公司Oracle UCM站点下载最新版本后再执行上传,避免出现数据兼容错误。", vbCritical, "版本不兼容" Exit Sub End If ' 原有REST API上传逻辑保留在下方 ' ------------------------------- ' ... End Sub
可选增强方案
- 可在
Workbook_Open事件中加入版本校验,工作簿打开时就提前提示用户更新,不用等到执行上传操作才提醒 - 若需要更高的安全性,可在服务端REST接口增加版本校验逻辑,上传请求时携带当前工作簿版本号,服务端比对不通过直接拒绝请求,形成双保险避免VBA被篡改绕过校验
- 可将UCM站点的最新版下载入口说明加入提示框,降低用户获取新版本的成本
内容的提问来源于stack exchange,提问作者Nirbhay
相关产品推荐
相关产品推荐

