VBA CreateObject

时间:2014-02-06 17:33:31

标签: excel vba excel-vba createobject

我从1月10日起被困在这个代码行上,我在一封电子邮件中得到了它,我发现我必须学习课程模块,所以我做了,现在又回到了新的基础上。代码行是(严重警告:您必须转到工具 - > VBE中的引用并使用早期绑定激活 Microsoft WinHTTP服务,版本5.1 ):

Dim WinHttpReq As Object

Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

对于CreateObject,我转到MS帮助并说:创建并返回ActiveX对象的引用

现在我所知道的,当我们创建一个引用时,它只是一个对象并且这样做(如果我错了请纠正我):

Dim ThatIKnow as Workbook

然后我们像这样实例化

Set ThatIKnow = Workbooks.Add

为什么我们需要CreateObject?

帮助继续说“ActiveX对象的 ...

如果我在帮助上点击ActiveX,它会指出词汇表: 通过自动化接口

向其他应用程序或编程工具公开的对象

这条线绝对没有告诉我什么。所有我对ActiveX的了解都是这个

enter image description here

...我认为它是ActiveX控件......(我必须承认,虽然ActiveX对我来说总是一个模糊的术语)

现在在CreateObject(“WinHttp.WinHttpRequest.5.1”)中,我已经搜索了Web,我找不到一些像WinHttp对象及其功能的MS帮助。无论如何,对象浏览器将它作为库,但F1帮助按钮不显示任何内容。所以对象浏览器说它是一个库,我在Web上找到它,称为WinHttp Reference,也作为WinHttp对象。什么是这些?

对于上帝的爱,为什么称它为“ 5.1 ”?我没有找到任何WinHttpRequest.5.1术语

我不是要求咀嚼食物,但是任何破解食物的努力都会使整个局势更加紧张。请任何可以帮助我破解这一行代码的压力都是帮助

感谢您收看我的问题

2 个答案:

答案 0 :(得分:15)

我不会介绍Early Binding和Late Binding之间的区别。您可以在此KB Article

中了解相关信息

然而,我会做的是回答你在问题中提出的所有小问题,例如

  1. 什么是CreateObject?
  2. 什么是ActiveX控件?
  3. 创建并返回ActiveX对象的引用 - 含义
  4. 为了上帝的爱,为什么它被称为“5.1”?

  5. 什么是CreateObject?


    正如我在上面的评论中提到的CreateObject是一个在Visual Basic(vb6和vb.net),Visual Basic for Applications(VBA)和VBScript中使用的函数,用于动态创建ActiveX控件的实例或COM对象。


    什么是ActiveX控件?


    ActiveX控件是一个组件程序对象,可以被众多应用程序重用。基于Component Object Model (COM)创建ActiveX控件的主要技术。通常,ActiveX控件取代了早期的OCX(对象链接和嵌入自定义控件)。

    可以使用任何识别Microsoft的组件对象模型的编程语言创建ActiveX控件,例如Visual Basic和C ++

    这些ActiveX控件在所谓的容器中运行,例如MS Excel,它使用组件对象模型程序接口。事实上,这实际上有助于我们所有人想象一下,每次都从头开始编写这些控件的代码!


    创建并返回ActiveX对象的引用 - 含义


    让我参照你引用的内容解释一下。

    Dim ThatIKnow as Workbook
    
    Set ThatIKnow = Workbooks.Add
    

    Dim ThatIKnow as Workbook我们正在做的是告诉运行时环境我们将创建一个“Workbook”类型的对象,并在我们的代码中将其引用为“ThatIKnow”。然而,这实际上并没有创建对象,也没有分配任何内存。仅当使用New关键字或Createobject等任何其他方式创建对象并且对此变量ThatIKnow

    进行分配时,才会分配内存

    因此,当我们说Set ThatIKnow = Workbooks.AddSet oXLApp = CreateObject("Excel.Application")时,我们实际上是在内存中创建对象。


    为了上帝之爱,为什么称它为“5.1”?


    正是因为“上帝的爱”,我们从与其他哺乳动物不同的灵长类动物进化而来。因此,请考虑我们这些哺乳动物的X版本:D

    是的,当Pankaj Jaju提到它是版本号时,他是对的。现在什么是版本号,为什么它很重要?

    版本控制又名源代码控制又简单的版本控制只是对文档,应用程序,信息集合等的更改进行管理。任何新的更改通常都由数字或字母代码或其组合来识别。

    这很有用,因为它让我们知道该文档或应用程序的当前版本。

    有关版本控制的进一步阅读,请参阅THIS LINK


    希望我已经涵盖了你所有的问题?如果没有,那么随意问。

答案 1 :(得分:1)

Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

几乎与

相同
Dim WinHttpReq As WinHttpRequest
Set WinHttpReq = New WinHttpRequest

不同之处在于,通过第一种方法,您不必将库包含在“参考”列表中,但是作为付出的代价,IDE中不会有intllisense提示,因为您的引用是通用对象。

第二种形式是优选的。它允许VB在您协助它们时将对象类型检查为兼容性,或者将它们作为参数传递。它还为您提供了在您键入名称时对象具有的方法和属性的提示。