提问人:DecimalTurn 提问时间:9/17/2023 最后编辑:DecimalTurn 更新时间:9/17/2023 访问量:105
Modules 在 Excel VBA 中始终为空
Modules is always empty in Excel VBA
问:
我正在研究这个问题:从文本文件导入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
我尝试在对象浏览器中查看定义。这有点奇怪,因为该属性是隐藏的,它返回一个对象而不是 .Sheets
Modules
该功能是否出于安全原因或其他原因从 Excel 中删除? 我正在使用 Microsoft Excel® for Microsoft® 365 MSO(版本 2310 内部版本 16.0.16907.20000)64 位。
答:
3赞
taller
9/17/2023
#1
ThisWorkbook.Modules
(或 ) 是 Microsoft Excel 联机文档中未提及的秘密对象。它仅包括通过 创建的模块。普通模块在其覆盖范围内。Application.Modules
<Modules>.Add
NOT
using 可以操作所有 VBA 组件,但需要启用。ThisWorkbook.VBProject.VBComponents
Trust 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
评论
Application.Modules
Test3
ThisWorkbook.Modules
仅捕获加载了 .这些模块在其覆盖范围内。@DecimalTurn<module object>.InsertFile
normal
NOT
<Modules>.Add