这与以编程方式添加but...without项目引用的老问题不同:是否有一种方法以编程方式添加引用、VBE或对VBIDE的现有引用?
许多微软应用程序都有内置的应用程序类VBE,并有自己的引用集合:Application.VBE.ActiveVBProject.References。这包括Access、Excel、Word、PowerPoint、Visio以及许多其他。但有些微软应用程序没有VBE,比如Outlook和Publisher。此外,有各种第三方软件包的VBA,如AutoCad和Corel绘图,但这些是否有VBE类是未知的。
对于那些没有VBE的应用程序,有什么完全编程的方法来添加对VBIDE的引用吗..?(假设它在系统上)
我愿意接受除了SendKeys以外的任何想法。我曾经想过在字符级别编辑文档文件。例如,如果深入到Excel文件的XML中,我肯定会找到存储VBA引用的标记。为了进行访问,它将是SaveToText和LoadFromText,然后深入挖掘文本文件。但对于其他应用程序,我对它们的文件结构一无所知,甚至几乎一无所知。
发布于 2018-07-14 16:34:36
Mathieu Guindon是对的,VBA需要被授予操作工作簿项目的访问权限,通常在安装时授予它一次,并且很少被撤销。Cindy是对的,引用存储在二进制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发布于 2019-10-23 20:47:34
你的想法很有趣:
我曾经想过在字符级别编辑文档文件。例如,我确定如果深入到Excel文件的XML中
引用不是保存在XML中,而是保存在./vbaProject.bin中(用于Excel )。>5)在.xlsm文件中,它只是压缩存档。这个vbaProject.bin是zip存档中的二进制blob,但是有人试图对它进行解码,例如在 of解析器项目中有一些代码来检测VBA引用的数组。使用这段代码,应该可以为这个数组设计一个更新函数。
https://stackoverflow.com/questions/51332307
复制相似问题