Lim*_*awk 6 security excel vba excel-vba
我为客户创建了一个包含大量VBA代码的Excel工作簿.客户将向我提供数据.我将该数据导入到VBA载入模板中,将其另存为xlsm,然后将其传递给客户.我得到了工作簿的报酬,因此我需要阻止他们尝试将新数据复制到现有工作簿中并重新使用它.
我怎么能以某种方式阻止客户重复使用工作簿,只需在主工作表上输入新数据,然后保存为新的工作簿,并免费使用VBA代码.(或者,他们可以在Windows中复制文件,然后在复制的版本上输入新数据.)我需要检测初始导入数据中数据的重大变化.
主表上的数据是相当静态的(在许多已知列上甚至可能是完全静态的).我正在考虑在导入时随机抽取一些单元格数据(可能是10个随机单元格,或行数等),并将这些数据存储在某处.例如,如果50%的单元格改变数据,我可以禁用(或短路)代码中的公共入口点......或其他什么?
我想让客户保持一定的灵活性,但要防止滥用.
也许代码中的功能会过期
谢谢你提出这个问题。感谢您设置赏金。考虑到您希望将 VBA 代码货币化,这是一个非常有趣的问题,作为 VBA 程序员,我通常无法将 VBA 代码货币化。你坚持是件好事,我会尽力给出答案。
首先,让我加入到 VBA 很容易被黑客攻击的答案中。密码保护可能被破解。我会加入受访者的行列,他们说你应该选择一种编译语言作为你的代码的容器。为什么不尝试使用 Visual Studio Tools For Office (VSTO) .NET 程序集中的 C# 或 VB.NET?
VSTO 会将已编译的程序集与工作簿关联起来。这种机制值得了解,因为如果您坚持使用 VBA,我们可以使用相同的机制(见下文)。每个工作簿都有一个 CustomDocumentProperties 集合,可以在其中设置自定义属性(它说“文档而不是电子表格”,因为在 Word 中也可以找到相同的内容,因此“文档”是通用情况)。
Excel 将查看工作簿的 CustomDocumentProperties 集合并搜索“_AssemblyName”和“_AssemblyLocation”;如果 _AssemblyName 是一个星号,那么它知道需要加载 .NET/VSTO 程序集,_AssemblyLocation 提供对要加载的文件的查找(您必须深入研究这一点,我忘记了详细信息)。 参考
不管怎样,我想起了 VSTO CustomDocumentProperties 机制,因为如果您坚持使用 VBA,那么我建议在 CustomDocumentProperties 集合中存储一个值,以帮助您及时终止代码的功能。注意不要使用BuiltInDocumentProperties("Creation Date"),因为它很容易识别;而是使用代码字,例如“BlackHawk”。这是一些示例代码。
Sub WriteProperty()
ThisWorkbook.BuiltinDocumentProperties("Creation Date") = CDate("13/10/2016 19:15:22")
If IsEmpty(CustomDocumentPropertiesItemOERN(ThisWorkbook, "BlackHawk")) Then
Call ThisWorkbook.CustomDocumentProperties.Add("BlackHawk", False, MsoDocProperties.msoPropertyTypeDate, Now())
End If
End Sub
Function CustomDocumentPropertiesItemOERN(ByVal wb As Excel.Workbook, ByVal vKey As Variant)
On Error Resume Next
CustomDocumentPropertiesItemOERN = wb.CustomDocumentProperties.Item(vKey)
End Function
Sub ReadProperty()
Debug.Print "ThisWorkbook.BuiltinDocumentProperties(""Creation Date""):=" & ThisWorkbook.BuiltinDocumentProperties("Creation Date")
Debug.Print "CustomDocumentPropertiesItemOERN(ThisWorkbook, ""BlackHawk""):=" & CustomDocumentPropertiesItemOERN(ThisWorkbook, "BlackHawk")
End Sub
Run Code Online (Sandbox Code Playgroud)
因此,您可以将 CustomDocumentProperty“BlackHawk”设置为工作簿的初始创建时间,然后允许客户端使用代码 24 小时,甚至 48 小时(注意周末,创建周五工作到周二),然后代码可以拒绝进行操作,而是抛出一条消息,说支付 LimaNightHawk 更多钱!
PS 祝你的收入模式好运。
PPS 我读了你的个人资料,感谢你服兵役。
归档时间: |
|
查看次数: |
367 次 |
最近记录: |