在VBA和VBS中创建对象

在VBA和VBS中创建对象,vba,vbscript,Vba,Vbscript,最近在尝试访问windows防火墙的属性和方法时,我引用了hnetcfg.dll,并能够为对象(如inetfwMGr,inetfwPolicy等)标注变量 但我无法根据需要为它们创建对象,例如 set obj=new inetfwmgr 不起作用 通过四处阅读,我了解到我需要使用 CreateObject(“hnetcfg.FwMgr”) 继续前进 我想知道的是,如何学习如何从VBA中的给定dll创建哪些对象。看看参考资料。我找不到任何线索表明您需要创建对象hnetcfg.FwMgr才能继续。为

最近在尝试访问windows防火墙的属性和方法时,我引用了
hnetcfg.dll
,并能够为对象(如
inetfwMGr
inetfwPolicy
等)标注变量

但我无法根据需要为它们创建对象,例如
set obj=new inetfwmgr

不起作用

通过四处阅读,我了解到我需要使用
CreateObject(“hnetcfg.FwMgr”)

继续前进

我想知道的是,如何学习如何从VBA中的给定dll创建哪些对象。看看参考资料。我找不到任何线索表明您需要创建对象
hnetcfg.FwMgr
才能继续。为什么
FwMgr
?如何发现是否有其他对象可以从
hnetfg.dll
创建?这些信息应该是我没有见过的引用中的一个信息,还是在查看
hnetcfg
的属性时隐含的


如果您有任何见解,我们将不胜感激。谢谢

我对这个dll一无所知,但我认为这会有所帮助

您可以使用CreateObject,从长远来看,您可能希望提高可移植性。这称为“后期绑定”。另一方面,如果已设置对dll的引用,则可以对NetFwLibLib对象进行尺寸标注并创建新对象(“早期绑定”)。这里的优点是,您将获得intellisense,并可以在对象浏览器中检查其属性。以下是用Excel VBE编写的一些代码:

Sub test()
Dim test As NetFwTypeLib.INetFwMgr
Set test = New NetFwTypeLib.INetFwMgr
With test
    .CurrentProfileType = ...
End With
End Sub
此外,还可以使用对象浏览器检查FwTypeLib。只需单击F2(在本例中为Excel的VBE),您将看到如下内容:


您需要使用类型库查看器。我强烈推荐

也有一个像样的

也有很多关于Windows防火墙的脚本参考


这是Visual Studio的某个版本吗?@natemrice当然。我更新了我的答案以澄清。谢谢。嗨,谢谢你描述早期和晚期绑定的区别。然而,这又回到了我问题的根源。将代码复制并粘贴到VBA(具有适当的引用集)会导致“新关键字消息的使用无效”。当我使用CreateObject(“hnetcfg.fwMgr”)时,我不明白这一点。与dll中的所有其他类型相比,fwMgr有什么特殊之处?我想理解这一点,因为我不认为类型查看器显示出它有任何特殊的特性,但正如我上面的评论一样-类型查看器没有阐明为什么我不能使用set f=new inetfwMgr,但我可以使用CreateObject(“hnetcfg.fwMgr”),甚至为什么我可以创建一个对象fwMgr,但不是fwMgrPolicy-除了策略显然属于某个对象这一概念之外,还有什么区别?但是我如何知道首先创建fwMgr?New和publicnotcreateable:使用New和CreateObject不是一回事。他们不能比较,因为他们做的事情不同。您如何知道要创建哪些对象?通过阅读文档或尝试错误。(有时通过检查目标代码本身。)