excel中,给VBA工程加密后,运行就出错,错误提示号:50289
以上所说出错,点调试,出错的句语是以下语句,也就是动态创建窗体的语句:SetusForm=ThisWorkbook.VBProject.VBComponents.Add(...
以上所说出错,点调试,出错的句语是以下语句,也就是动态创建窗体的语句:
Set usForm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
若取消工程加密,运行就不会出错,这是为什么?
若不能解决这个问题,可否通过运行时用代码对工程解密,程序运行结束再对工程加密。
有vba直接对工程加密和解密的代码怎么写,请高手帮助!!!!
发错的图如下:
通过用代码对VBA工程解密,再用代码对VBA工程加密,可能是更好方法,希望提供此帮助。
别的VBA在对工程加密,能正常运行。 展开
Set usForm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
若取消工程加密,运行就不会出错,这是为什么?
若不能解决这个问题,可否通过运行时用代码对工程解密,程序运行结束再对工程加密。
有vba直接对工程加密和解密的代码怎么写,请高手帮助!!!!
发错的图如下:
通过用代码对VBA工程解密,再用代码对VBA工程加密,可能是更好方法,希望提供此帮助。
别的VBA在对工程加密,能正常运行。 展开
展开全部
当然会出错:
因为你加密了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 人机交互式解密或加密,直接用语句设置,也就是不是显式的进行解密或加密,可不可以?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询