excel中,给VBA工程加密后,运行就出错,错误提示号:50289

以上所说出错,点调试,出错的句语是以下语句,也就是动态创建窗体的语句:SetusForm=ThisWorkbook.VBProject.VBComponents.Add(... 以上所说出错,点调试,出错的句语是以下语句,也就是动态创建窗体的语句:
Set usForm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
若取消工程加密,运行就不会出错,这是为什么?
若不能解决这个问题,可否通过运行时用代码对工程解密,程序运行结束再对工程加密。
有vba直接对工程加密和解密的代码怎么写,请高手帮助!!!!

发错的图如下:
通过用代码对VBA工程解密,再用代码对VBA工程加密,可能是更好方法,希望提供此帮助。
别的VBA在对工程加密,能正常运行。
展开
 我来答
刚下了点小雨
2014-12-07 · TA获得超过335个赞
知道小有建树答主
回答量:194
采纳率:100%
帮助的人:158万
展开全部

当然会出错:

因为你加密了VBA工程,而加密的VBA工程的里的代码就会被保护。

也就是说VBA工程加密后,不可以增加删除代码,不可以增加删除窗体,不可以增加删除模块和类模块。而你的代码中:

Set usForm =ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)这个是增加一个窗体,这对受保护的工程来说是不被允许的。除了你这个,还有例如ThisWorkbook.VBProject.VBComponents.Remove XXXXX(删除代码)

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name = "模块1"(增加模块)

等等都是不可以的。


如果你即要加密VBA工程,又想让程序在运行过程中去新增窗体,建议可以考虑一下sendkey方法,在程序开始运行时执行sendkey解锁工程密码。你可以试试代码:(在我电脑上测试了是可以输入或增加工程密码的)

你可以在你增加窗体的那句代码前先执行inputpw()解锁工程密码。

Sub inputpw() '输入密码解锁
  Dim pw$
  pw = "password"
  If ThisWorkbook.VBProject.Protection = vbext_pp_locked Then '判断工程是否解锁
      '打开VBAProject工程属性
      Application.VBE.CommandBars(1).Controls("工具(T)").Controls("VBAProject 属性(&E)...").Execute
      Application.SendKeys pw        '输入密码
      Application.SendKeys "{ENTER}" 'enter解锁
  End If
End If
End Sub

Sub addpw() '加工程密码
  Dim pw$
  pw = "password"
  If ThisWorkbook.VBProject.Protection = vbext_pp_none Then '判断是否加密码工程
      '打开VBAProject工程属性
      Application.VBE.CommandBars(1).Controls("工具(T)").Controls("VBAProject 属性(&E)...").Execute
      Application.SendKeys "^+{TAB}" 'ctrl+tab移动到保护
      Application.SendKeys "{TAB}"  'tab移动到第一次输密码位置
      Application.SendKeys pw      '输入密码
      Application.SendKeys "{TAB}"  'tab移动到第二次输密码位置
      Application.SendKeys pw        '输入密码
      Application.SendKeys "{ENTER}" 'enter加锁
      DoEvents
  End If
End Sub
追问
不通过sendkey 人机交互式解密或加密,直接用语句设置,也就是不是显式的进行解密或加密,可不可以?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式