簡體   English   中英

Vba Excel Trust對VBA項目模型的訪問

[英]Vba Excel Trust access to the VBA project model

我需要為客戶端執行以下代碼行,問題是要訪問它們,我必須在項目內激活某個選項,是否有任何方法可以避免這種情況?

圖片

Application.VBE.ActiveVBProject.References.AddFromFile "C:\Windows\System32\mshtml.tlb"
Application.VBE.ActiveVBProject.References.AddFromFile "C:\Windows\System32\msxml6.dll"

它們是執行我的宏所必需的幾個庫。

我正在運行的宏如下:

Sub GetCurrentDate()
    Dim S$

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "http://www.fechadehoy.com/venezuela", False
        .send
        S = .responseText
    End With

    With CreateObject("htmlfile")
        .body.innerHTML = S
        MsgBox .getElementById("fecha").innerText
    End With
End Sub

執行我的宏所需的庫

Microsoft XML, v6.0
Microsoft HTML Object Library

為了訪問它們,我必須在項目中激活某個選項,有什么方法可以避免這種情況?

該選項不在項目內 ,而是在主機應用程序級別(Excel)上:能否信任對VBIDE API的編程訪問是宏安全設置的重要組成部分,並且不存在任何解決方案。

任何以編程方式規避此安全設置的方​​法,都會使世界上的每種宏病毒都跳進一個巨大的安全漏洞。


但是您不需要這樣做。 您的代碼正在使用CreateObject而不是New運算符創建位於這些庫中的類的實例:不需要引用。

With CreateObject("MSXML2.XMLHTTP") ' returns an Object/XMLHTTP reference
    .Open ...  'late-bound member call (no intellisense, no compile-time validation)
    '...
End With

CreateObject使用指定的ProgID字符串在Windows注冊表中查找注冊,找到類型庫,創建該類型的實例,並返回對該對象的引用-一切都在運行時解析(因此“后期”綁定),只要ProgID存在於注冊表中,並且后期綁定代碼中沒有錯字( Option Explicit不能將您從中救出來),一切都會“正常”。

如果您改用New關鍵字...

With New MSXML2.XMLHTTP ' returns an XMLHTTP reference
    .Open ... 'early-bound member call (with intelilsense and compile-time validation)
    '...
End With

沒有對MSXML2庫的項目引用,就無法編譯此文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM