[英]VBA: How can I password protect modules using code?
我有一个文件,可以保存自己的副本以转到某些收件人,因此您最终会得到许多只包含收件人特定信息的文件和包含所有信息的原始maste文件。 在创建特定于收件人的文件时,我的代码会删除与该收件人相关的所有信息,并使用以下函数使用随机密码锁定工作簿和工作表:
Function Pwd(iLength As Integer) As String
Dim i As Integer, iTemp As Integer, bOK As Boolean, strTemp As String
'48-57 = 0 To 9, 65-90 = A To Z, 97-122 = a To z
'amend For other characters If required
For i = 1 To iLength
Do
iTemp = Int((122 - 48 + 1) * Rnd + 48)
Select Case iTemp
Case 48 To 57, 65 To 90, 97 To 122: bOK = True
Case Else: bOK = False
End Select
Loop Until bOK = True
bOK = False
strTemp = strTemp & Chr(iTemp)
Next i
Pwd = strTemp
End Function
是否也可以锁定模块以使其无法编辑? 我想要的是Excel在Visual Basic中提供的相同功能,转到工具 - > VBAProject - 项目属性 - >保护,但是通过代码执行此操作,以便它可以应用于每个收件人特定文件。
我可以使用以下代码对工作表应用保护:
Sheets(1).Protect Password, True, True
并使用以下代码的工作簿:
ActiveWorkbook.Protect Password, True, False
但有什么东西可以用来锁定模块吗?
尽管已经给出了关于Excel密码/保护的安全性以及由Carl Colijn链接的综合(非SendKeys)解决方案的良好建议,但我自己也使用了脏SendKeys方法并取得了一些成功 - 请参阅下面的示例, 此处了解更多详情在SendKeys上。 YMMV等
请注意,您必须在Excel信任中心>宏设置中找到“信任对VBA项目对象模型的访问权限”选项,或者等效于Excel版本的选项
Sub UnprotectVBProj(ByRef WB As Workbook, ByVal Pwd As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub ' already unprotected
Set Application.VBE.ActiveVBProject = vbProj
SendKeys "%TE" & Pwd & "~~"
End Sub
Sub ProtectVBProj(ByRef WB As Workbook, ByVal Pwd As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection = 1 Then Exit Sub ' already protected
Set Application.VBE.ActiveVBProject = vbProj
SendKeys "%TE+{TAB}{RIGHT}%V%P" & Pwd & "%C" & Pwd & "{TAB}{ENTER}"
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.