VBA:我如何使用代码密码保护模块?

我有一个文件保存自己的副本去某些收件人,所以你最终得到许多文件,只包含特定于收件人的信息和包含所有信息的原始maste文件。 特定于收件人的文件制作完成后,我的代码会删除与该收件人相关的所有信息,并使用以下函数使用随机生成的密码locking工作簿和工作表:

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 

是否也可以locking模块,以便它们不能被编辑? 我想要的是与Visual Basic中通过转到工具 – > VBAProject – Project Properties – > Protection相同的function,但要通过代码执行此操作,以便可以将其应用于每个收件人特定文件。

我可以使用如下代码对表单应用保护:

 Sheets(1).Protect Password, True, True 

对于代码如下的工作簿:

 ActiveWorkbook.Protect Password, True, False 

但有什么我可以用来locking模块?

尽pipe已经给出了关于Excel密码/保护的安全性以及由Carl Colijn链接的全面(非SendKeys)解决scheme的良好build议,但我已经使用了SendKeys方法,并取得了一些成功 – 请参阅下面的示例,以及更多详细信息在SendKeys上。 YMMV等

请注意,您必须在Excel信任中心>macros设置中find“信任对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