这与关于以编程方式添加VBA项目引用的旧问题有所不同:是否可以通过编程方式添加引用,但是... 没有VBE或现有的对VBIDE的引用。
许多Microsoft应用程序具有内置的应用程序类VBE
,并具有自己的引用集合:Application.VBE.ActiveVBProject.References
。这包括Access,Excel,Word,PowerPoint,Visio,可能还有许多其他工具。但是某些Microsoft应用程序没有VBE,例如Outlook和Publisher。另外,有多种带有VBA的第三方软件包,例如AutoCad和Corel Draw,但是这些软件包是否具有VBE类尚不清楚。
对于那些没有VBE的应用程序,是否有任何完全编程的方法来添加对VBIDE的引用。 (假设它在系统上)
除SendKeys
外,我几乎乐于接受其他任何想法。我曾经考虑过在字符级别上编辑文档文件。例如,我确定如果我深入到Excel文件的XML,我会找到存储VBA引用的标签。对于Access,它将是SaveToText和LoadFromText,然后在文本文件中进行挖掘。但是对于其他应用程序,我对其文件结构一无所知。
答案 0 :(得分:1)
Mathieu Guindon是正确的,VBA需要授予访问权限才能操作工作簿项目,通常只有一次授予权限才能进行安装,并且很少被撤销。辛迪·梅斯特(Cindy Meister)是对的,引用存储在二进制Blob中,因此钻入xml将无济于事。
要授予访问权限,(这是在Excel 2016中)
因此以下代码对我有用,因为已授予访问权限。该代码添加了Microsoft脚本运行时库(这是我最喜欢的非核心)。
Sub Test()
Dim objProj As Object 'VBIDE.VBProject
Set objProj = ThisWorkbook.VBProject
Dim vRefLoop As Variant
Dim bIsMyReferencePresent As Boolean
bIsMyReferencePresent = False
For Each vRefLoop In objProj.References
Debug.Print vRefLoop.Name
If vRefLoop.Name = "Scripting" Then
bIsMyReferencePresent = True
End If
Next
If bIsMyReferencePresent = False Then
objProj.References.AddFromFile "c:\windows\syswow64\scrrun.dll"
End If
End Sub
答案 1 :(得分:0)
您的想法很有趣:
我曾经想过在角色上编辑文档文件 水平。例如,我确定我是否可以深入到Excel的XML中 文件
引用不是保存为XML,而是保存为.xlsm文件中的./vbaProject.bin
(对于Excel而言> 5)(仅是zip存档)。 vbaProject.bin
是zip归档文件中的一个二进制blob,但有人尝试对其进行解码,例如在 officeparser 项目中,有some code个可以检测VBA参考数组。
使用此代码,应该可以为该阵列设计更新功能。