【发布时间】:2019-03-25 19:27:37
【问题描述】:
我目前正在处理一个无法验证是否已安装所有模块的项目。越来越多的模块用于我使用的程序的常用功能。我在网上尝试了一些我无法使用的解决方案,因为我不熟悉Activeworkbook.VBProject.VBComponents() 方法。
有人提到我应该检查工具参考 Microsoft Visual Basic For Applications Extensibility 我检查了没有结果。任何帮助,将不胜感激。 :)
参考资料:
https://www.devhut.net/2010/12/09/ms-access-vba-determine-if-a-module-exists/
这是我的代码:
Option Explicit
Public Function Is_Module_Loaded(name As String) As Boolean
Dim Module As Object
Dim Module_Name As String
Module_Name = name
Is_Module_Loaded = False
On Error GoTo errload
Set Module = ActiveWorkbook.VBProject.VBComponents(Module_Name).CodeModule
Is_Module_Loaded = True
If (0 <> 0) Then
errload:
MsgBox ("MODULE: " & Module_Name & " is not installed please add")
Stop
End If
End Function
在运行代码时,我没有收到任何非常有帮助的错误,但我自己的错误报告错误说我的模块不存在。
【问题讨论】:
-
这很好地概述了此类任务所涉及的内容:cpearson.com/excel/vbe.aspx您是否在 Excel 选项中设置了“信任对 VBProject 的访问”复选框?
-
请注意,您所能做的就是验证 VBA 项目是否包含以您要查找的内容命名的模块 - 这并不一定意味着您想要的实际模块包含您的内容需要它。考虑在
ThisWorkbook中拥有所需模块的副本,如果目标项目中存在该模块,则使用VBIDE API 将其替换为该模块,如果不存在则添加它。现在,考虑MsgBox Err.Description,而不是实际上抑制可能有用的错误的手工错误消息。 实际错误是什么? -
Mathieu 你能详细说明
MsgBox Err.Description部分吗?我对此不熟悉。我相信即使没有我的自定义错误消息,我也没有错误。我也无法弄清楚 VBIDE API,但是从某个位置加载模块的代码的想法会非常有用。