gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:34:11 25 4
gpt4 key购买 nike

我有一个文件,它保存自己的副本以发送给某些收件人,因此您最终会得到许多仅包含收件人特定信息的文件和包含所有信息的原始 master 文件。制作特定于收件人的文件时,我有代码可以删除除与该收件人相关的信息以外的所有内容,并使用以下功能使用随机生成的密码锁定工作簿和工作表:

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 方法并取得了一些成功 - 请参见下面的示例和 here有关 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

关于VBA:如何使用代码密码保护模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35038502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com