Modules 在 Excel VBA 中始终为空

Modules is always empty in Excel VBA

提问人:DecimalTurn 提问时间:9/17/2023 最后编辑:DecimalTurn 更新时间:9/17/2023 访问量:105

问:

我正在研究这个问题:从文本文件导入Excel-VBA模块(不需要信任中心)

提供的代码使用了属性成员,该属性成员似乎是 VBA 模块的集合。.Modules

但是,我似乎无法在Excel VBA中使用它。它总是返回一个对象为零的集合,否则我收到不匹配错误:


Sub Test1()

 Dim mds As Modules
 Set mds = Application.Modules
 Debug.Print mds.Count
 'Output: 0

End Sub

Sub Test2()

 Dim mds As Modules
 Set mds = ThisWorkbook.Modules 'This line will return a type mismatch error
 Debug.Print mds.Count

End Sub

Sub Test3()

 Dim mds
 Set mds = ThisWorkbook.Modules
 Debug.Print mds.Count
 'Output: 0

End Sub

这个问题似乎特定于 Excel VBA,因为如果我将 VBA 模块添加到 Access 项目并尝试运行,我会得到一个非零数字。另请注意,模块仅针对 Access 进行记录。Test1

我尝试在对象浏览器中查看定义。这有点奇怪,因为该属性是隐藏的,它返回一个对象而不是 .SheetsModules

enter image description here

该功能是否出于安全原因或其他原因从 Excel 中删除? 我正在使用 Microsoft Excel® for Microsoft® 365 MSO(版本 2310 内部版本 16.0.16907.20000)64 位。

Excel VBA MS-Access 模块

评论

0赞 taller 9/17/2023
请参考 BigBen 对 stackoverflow.com/questions/54221055/.... 的回复。 可以与 Excel 365 一起使用,尽管它没有记录。Application.Modules
0赞 June7 9/17/2023
这回答了你的问题吗?Excel-VBA 从文本文件导入模块(无需信任中心)
0赞 DecimalTurn 9/17/2023
@taller_ExcelHome 我已经阅读了 BigBen 的答案。我问题中的子遵循了 BigBen 的两项建议,但它仍然不起作用。我得到输出 0。Test3
0赞 taller 9/17/2023
ThisWorkbook.Modules仅捕获加载了 .这些模块在其覆盖范围内。@DecimalTurn<module object>.InsertFilenormalNOT
0赞 DecimalTurn 9/17/2023
@taller_ExcelHome 哦,我明白了!这就是我所缺少的。只有通过添加的那些才会在那里。从IMO的原始问题中可以看出,普通模块也不应该存在。请随时发布答案,我会接受的。<Modules>.Add

答:

3赞 taller 9/17/2023 #1

ThisWorkbook.Modules(或 ) 是 Microsoft Excel 联机文档中未提及的秘密对象。它仅包括通过 创建的模块。普通模块在其覆盖范围内。Application.Modules<Modules>.AddNOT

using 可以操作所有 VBA 组件,但需要启用。ThisWorkbook.VBProject.VBComponentsTrust access to the VBA project object model

Option Explicit
Sub Demo()
    Dim mds As Module, lib As String
    Debug.Print "Before:" & ThisWorkbook.Modules.Count
    Set mds = ThisWorkbook.Modules.Add 'Create a new Library Module
    mds.Name = "Library"
    lib = "d:\temp\demo.bas"
    mds.InsertFile lib 'Insert the code
    Debug.Print "After:" & ThisWorkbook.Modules.Count
    Debug.Print "VBCs:" & ThisWorkbook.VBProject.VBComponents.Count
End Sub

输出

Before:0
After:1
VBCs:4

4 VBC:Sheet1、ThisWorkbook、库、模块1

enter image description here