VBA CreateObject
Asked Answered
M

2

6

I am stranded on this code line since 10th of January where i got it in an email and i found out i had to learn class modules so i did and returned to ask on a new basis now. The code line is (Critical Warning: you have to go to Tools--> References in VBE and activate the Microsoft WinHTTP Services, version 5.1 with Early Binding):

Dim WinHttpReq As Object

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

For CreateObject I go to MS Help and says: Creates and returns a reference of an ActiveX object

Now for all i know, when we create a reference it is for an object only and done like this (please correct me if i am wrong):

Dim ThatIKnow as Workbook

then we instantiate it like this

Set ThatIKnow = Workbooks.Add

Why we need CreateObject?

Help continues by saying "...of an ActiveX object"

And if I go to click ActiveX on the help it points out the glossary that says: An object that is exposed to other applications or programming tools through Automation interfaces

And this line absolutely tells me nothing. All I knew about ActiveX is this

enter image description here

...which i think are the ActiveX controls... (I must admit though ActiveX was always a foggy term for me)

Now inside the CreateObject("WinHttp.WinHttpRequest.5.1") i have scoured the Web and i cannot find some decent MS help for the WinHttp object and what it does. Anyway the Object Browser has it as library but the F1 help button shows up nothing. So the Object Browser says it's a Library, i have found it in the Web called as WinHttp Reference and also as a WinHttp Object. What is it from all these?

And for the love of God why it is called "5.1"? i didn't found anywhere a WinHttpRequest.5.1 term

i am not asking for chewed up food but any effort to crack the ainigma really tightens the whole situation more. Please any pinch that could help me crack this line of code will be tones of help

thanks for watching my question

Measured answered 6/2, 2014 at 17:33 Comment(5)
5.1 - I beleive is the version number of ActiveX objectCalifornia
Could you explain what this line of code does? It poses a huge problem to me to understand itMeasured
To undertsand how Early and Late Binding works, see this KB ARTICLE As far as CreateObject is concerned, it is a function which is used in Visual Basic (vb6 and vb.net), Visual Basic for Applications (VBA) and VBScript to dynamically create an instance of an ActiveX control or COM object.Power
If you still have a confusion, I can post a detailed answer :)Power
Please do sir but i will be able to answer you is some hours because right now i am leaving for a job and i will answer when i will be backMeasured
P
16

I will not cover the difference between Early Binding and Late Binding. You can read about them in this KB Article

What I will do however is answer all your little questions that you have in your question such as

  1. What is CreateObject?
  2. What is an ActiveX Control?
  3. Creates and returning a reference of an ActiveX object - Meaning
  4. And for the love of God why it is called "5.1"?

What is CreateObject?


As I mentioned in the comment above CreateObject is a function which is used in Visual Basic (vb6 and vb.net), Visual Basic for Applications (VBA) and VBScript to dynamically create an instance of an ActiveX control or COM object.


What is an ActiveX Control?


An ActiveX control is a component program object which can be re-used by numerous application programs. The main technology for creating ActiveX controls based on Component Object Model (COM). In general, ActiveX controls replace the earlier OCX (Object Linking and Embedding custom controls).

An ActiveX control can be created in any programming language that recognizes Microsoft's Component Object Model for example Visual Basic and C++

These ActiveX control runs in what is known as a container, for example MS Excel, which uses the Component Object Model program interfaces. In fact this actually helps us all. Imagine writing the code for these controls from scratch every time!


Creates and returning a reference of an ActiveX object - Meaning


Let me explain it in reference to what you quoted.

Dim ThatIKnow as Workbook

Set ThatIKnow = Workbooks.Add

What we are doing by Dim ThatIKnow as Workbook is telling the runtime environment that we will create an object of type "Workbook" and reference it as "ThatIKnow" in our code. However this actually doesnt create the object neither does it allocate any memory. The memory is allocated only when the object is created using the New keyword or any other way such as Createobject and assiged to this variable ThatIKnow

So when we say Set ThatIKnow = Workbooks.Add or Set oXLApp = CreateObject("Excel.Application"), we are actually creating the object in memory.


And for the love of God why it is called "5.1"?


It is because of "God's Love" we evolved from primates which diverged from other mammals. So consider us a Version X of those mammals :D

Yes, Pankaj Jaju is right when he mentioned that it is the version number. Now what is version number and why is it important?

Version control a.k.a source control a.k.a Revision control in simple terms is nothing but management of changes to documents, applications, collection of information etc. Any new change is usually identified by a number or letter code or a mix of it.

This is helpful as it let's us know the current version of that document or application.

For further reading on version control see THIS LINK


Hope I have covered all your questions? If not, then feel free to ask.

Power answered 6/2, 2014 at 19:43 Comment(5)
applause Another marvelous answer.Survivor
+1 wish i had this write up when i was learning scripting ... good work @SiddharthRoutCalifornia
+1: Because it's always nice to clear up some confusion for a new guy.Rhaetia
+1 Couldn't have explained it better in more simple language.Ade
Dear @Siddharth Rout there is nothing more to ask because you provided great help. I just read your answer! Thank you for your patienceMeasured
M
1
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

is almost same as

Dim WinHttpReq As WinHttpRequest
Set WinHttpReq = New WinHttpRequest

The difference is that with first approach you do not have to include the library in the "References" list, but as a price to pay you will not have intllisense hints in the IDE because your reference is generic Object.

Second form is preferable. It allows VB to check object types for compatibility as you assing them or pass them as parameters. It also give you hints which methods and properties the object has as you type its name.

Midriff answered 6/2, 2014 at 18:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.