【问题标题】:Protect VBA project using VBA使用 VBA 保护 VBA 项目
【发布时间】:2015-06-30 09:33:28
【问题描述】:

当我的 VB 项目完成运行时,它会保存一份新的 Excel 工作簿副本,然后通过电子邮件将其发送到提供的分发版。当代码运行时,VB 项目应该是不受保护的,允许 VBE 抛出的任何错误被“调试”(这对于锁定的项目是不可能的 - 不幸的是,调试的原因不能在错误处理程序中解释;它主要是与针对 SQL 服务器数据库运行的查询有关)。

但是,我希望 VB 项目在保存为新副本后受到保护,以防止收到分发副本的任何人能够访问 VB 项目。

我进行了搜索,但似乎找不到与使用 VBA 锁定 VB 项目相关的任何答案。任何指导表示赞赏。

【问题讨论】:

  • 为什么不减少日常工作以保存新副本,然后手动保护它,然后通过电子邮件发送。我假设我们只讨论 1 个文件。
  • 这是一个选项.. 如果可以自动化,我懒惰的一面宁愿这样做。

标签: vba excel


【解决方案1】:

基于this thread:

Sub ProtectVBProject(WB As Workbook, ByVal Password As String) 

    Dim VBP As VBProject, oWin As VBIDE.Window 
    Dim wbActive As Workbook 
    Dim i As Integer 

    Set VBP = WB.VBProject 
    Set wbActive = ActiveWorkbook 

    ' Close any code windows To ensure we hit the right project 
    For Each oWin In VBP.VBE.Windows 
        If InStr(oWin.Caption, "(") > 0 Then oWin.Close 
    Next oWin 

    WB.Activate 
    ' now use lovely SendKeys To unprotect 
    Application.OnKey "%{F11}" 
    SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & Password & "~" 
    Application.VBE.CommandBars(1).FindControl(Id:=2578, recursive:=True).Execute 
    WB.Save 
End Sub 

【讨论】:

  • 感谢 Maciej.. 从阅读线程中我注意到使用发送密钥绝对不是一个好主意。我选择不继续使用此解决方案,但是我会接受您的回答,因为它似乎是唯一可用的解决方案(尽管存在一些风险)。谢谢!
  • 您是否考虑过使用 Windows API? stackoverflow.com/questions/30508341/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
相关资源
最近更新 更多