以编程方式添加不带VBE或VBIDE的VBA项目引用。.

时间:2018-07-13 20:19:39

标签: vba excel-vba access-vba

这与关于以编程方式添加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,然后在文本文件中进行挖掘。但是对于其他应用程序,我对其文件结构一无所知。

2 个答案:

答案 0 :(得分:1)

Mathieu Guindon是正确的,VBA需要授予访问权限才能操作工作簿项目,通常只有一次授予权限才能进行安装,并且很少被撤销。辛迪·梅斯特(Cindy Meister)是对的,引用存储在二进制Blob中,因此钻入xml将无济于事。

要授予访问权限,(这是在Excel 2016中)

  • 单击“文件”,然后在从左侧弹出的菜单中选择“选项”,这将显示“ Excel选项”对话框。
  • 在“ Excel选项”对话框的左侧菜单上,选择“信任中心”,这将显示“信任中心”窗格。
  • 在“信任中心”窗格中,单击“信任中心设置”,这将显示“信任中心”对话框。
  • 在“信任中心”对话框的左侧菜单上,选择“宏设置...”
  • 在“宏设置”窗格中,选中“信任对VBA项目对象模型的访问”复选框

因此以下代码对我有用,因为已授予访问权限。该代码添加了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参考数组。 使用此代码,应该可以为该阵列设计更新功能。