![](/img/trans.png)
[英]How to check from .net code whether “Trust access to the VBA project object model” is enabled or not for an Excel application?
[英]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.