免责声明:
本文所提供的VBA代码仅供学习和参考之用。作者对用户使用此代码可能产生的任何后果概不负责,包括但不限于数据损失、程序错误或其他不良影响。
使用VBA开发工具时,为了实现动态代码更新,将会用到导入代码模块,其代码并不复杂,如下所示。
Sub Demo1()
Dim moduleName As String
Dim filePath As String
moduleName = "mdlVBP"
filePath = "D:\temp\demo.bas"
Debug.Print "Before:" & ThisWorkbook.VBProject.VBComponents.Count
With ThisWorkbook.VBProject.VBComponents.Import(filePath)
.Name = moduleName
End With
Debug.Print "After:" & ThisWorkbook.VBProject.VBComponents.Count
End Sub
运行示例代码,不出意外的话,您将喜提1004错误,如下所示。
错误提示已经非常清晰指明原因,无法访问VBA工程对象模型。请按照如下步骤操作修改相关安全设置:
第一步:依次点击【文件】>【选项】>【信任中心】>【信任中心设置】>【宏设置】选项卡。
第二步:在右侧【开发人员宏设置】部分中,选中【信任对VBA工程对象模型的访问】复选框。
第三步:单击【确定】按钮应用设置并关闭对话框。
完成上述操作之后,就可以运行正常示例代码Demo1。
在【立即窗口】中输出结果如下所示,运行代码之后,示例文件中共有4个模块(如插图中②所示)。
Before:3
After:4
上面是常规操作,接下来正式开始爆料 …
首先修改【信任中心】设置,取消选中【信任对VBA工程对象模型的访问】复选框,并单击【确定】按钮应用设置。
然后运行下面示例代码。
Sub Demo2()
Dim oModule As Module, filePath As String
Debug.Print "Before:" & ThisWorkbook.Modules.Count
Set oModule = ThisWorkbook.Modules.Add
oModule.Name = "mdlDemo"
filePath = "d:\temp\demo.bas"
oModule.InsertFile filePath
Debug.Print "After:" & ThisWorkbook.Modules.Count
End Sub
竟然没有任何错误,在【立即窗口】中输出结果如下所示。
Before:0
After:1
运行后示例文件中的模块如下图③所示。
如果启用【信任对VBA工程对象模型的访问】,在【立即窗口】中检查模块数量,结果如下。
?ThisWorkbook.VBProject.VBComponents.Count
5
ThisWorkbook.Modules.Add
可以在未启用【信任对VBA工程对象模型的访问】的情况下导入模块代码,并且新导入的模块属于ThisWorkbook.VBProject.VBComponents
集合,是不是很神奇!