gpt4 book ai didi

VBA 读取密码保护的宏

转载 作者:行者123 更新时间:2023-12-04 21:32:35 53 4
gpt4 key购买 nike

我正在尝试使用 VBA 打开可能具有密码保护宏的文件。下面的代码可以成功检测到带有没有密码的宏的文件,但无法提取带有密码保护的宏的文件。关于如何修复它的任何建议?

Dim wb As Workbook
Set wb = Application.Workbooks.Open(EUC_Path, UpdateLinks:=False)
If wb.VBProject.VBComponents.Count > 0 Then
ThisWorkbook.Worksheets(1).Range("F" & i).Value = "Yes"
Else
ThisWorkbook.Worksheets(1).Range("F" & i).Value = "No"
End If

提前致谢。

更新:我意识到我的上述描述不是很清楚,但我的最终目标是在确定工作表是否有宏开头之后实际读取每个宏中的行数。我检查行数的代码是:
With wb.VBProject
Number_Macro = 0
For k = 1 To .VBComponents.Count
Line_Count = .VBComponents.Item(k).CodeModule.CountOfLines
next k
End with

因此,我必须能够真正访问受密码保护的宏,而不是通过错误消息检测宏保护。有人可以给我建议吗?

谢谢

最佳答案

您根本无法迭代 VBComponents protected VB 项目的集合。

所以你需要第三种状态:

Protected



您可以验证是否 VBProject通过其 Protection 受到保护属性(property)。
If wb.VBProject.Protection = vbext_ProjectProtection.vbext_pp_none Then
' good to go
Else
' can't access components
End If

实际上,如果一个 VBA 项目受到保护,假设它具有 VBA 代码可能是安全的,因此"is"似乎是合理的。

你的逻辑也有缺陷: 任意 Excel VBA 项目将至少包含 2 个组件:
  • Sheet1 (总是至少有 1 个 Worksheet 对象)
  • ThisWorkbook (总是至少有 1 个 Workbook 对象)

  • 默认情况下实际上有 4 个: Sheet1 , Sheet2 , Sheet3 ,然后是 ThisWorkbook .但这取决于用户配置/Excel 设置,因此模块的数量并不意味着任何东西——无论项目是否有宏。

    我刚刚打开了一个 .xlsx(没有宏!)工作簿和 .VBProject.VBComponents.Count返回 137。

    要知道工作簿是否有宏,您需要找到具有公共(public)成员的标准模块。

    ...但是,文档模块(例如 Sheet2ThisWorkbook )本身可能不会公开任何宏,但仍有处理工作簿或工作表事件的 VBA 代码 - 所以你需要弄清楚是否有在您可以自信地说“此文件包含宏”之前,至少有一个文档模块和至少一个过程。

    关于VBA 读取密码保护的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47895845/

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