Функция CreateObject
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Примечание: Функция, метод, объект или свойство, описанные в данном разделе, отключаются, если служба обработки выражений Microsoft Jet выполняется в режиме песочницы, который не позволяет рассчитывать потенциально небезопасные выражения. Для получения дополнительных сведений выполните в справке поиск по словам «режим песочницы».
Создает и возвращает ссылку на объект ActiveX.
Функция CreateObject имеет следующие аргументы:
Обязательный аргумент. Variant ( String). Имя приложения и класс создаваемого объекта.
Необязательный аргумент. Variant ( String). Имя сетевого сервера, где будет создан объект. Если имя_сервера является пустой строкой («»), используется локальный компьютер.
Аргумент классАргумент использует синтаксис имя_приложения . тип_объекта и содержит следующие части:
Обязательный аргумент. Variant ( String). Имя приложения, предоставляющего объект.
Обязательный аргумент. Variant ( String). Тип (класс) объекта, который требуется создать.
В каждом приложении, поддерживающем автоматизацию, имеется хотя бы один тип объекта. Например, в приложении для обработки текстов могут быть объекты Application, Document и Toolbar.
Для создания объекта ActiveX назначьте объект, возвращаемый функцией CreateObject , в объектная переменная:
Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.
В этом примере мы будем автоматизировать объект электронной таблицы Excel в базе данных Access. Этот код запускает приложение, создающее объект, в данном случае — электронную таблицу Microsoft Excel. На созданный объект можно ссылаться в коде с помощью определенной вами объектной переменной. В следующем примере доступ к свойствам и методам нового объекта осуществлялся с помощью объектной переменной, ExcelSheet и других объектов Excel, включая объект Application и коллекцию Cells .
При объявлении объектной переменной с помощью предложения As Object создается переменная, которая может содержать ссылку на любой тип объекта. Однако обращение к объекту через эту переменную выполняется с поздним связыванием, то есть привязка создается при выполнении программы. Чтобы создать объектную переменную с ранним связыванием, то есть со связыванием при компиляции программы, объявите объектную переменную с определенным идентификатором класса. Например, объявите и создайте следующие ссылки Excel:
Ссылка посредством переменной ранней привязки может повысить производительность, но может содержать только ссылку на класс, указанный в объявление.
Можно передать объект, возвращаемый функцией CreateObject, функции, которая использует объект в качестве аргумента. Например, в следующем коде создается и передается ссылка на объект Excel.Application:
Call MySub (CreateObject(«Excel.Application»))
Вы можете создать объект на удаленном компьютере, подключенном к сети, указав его имя в аргументе имя_сервера функции CreateObject. Это имя совпадает с именем компьютера в имени общего ресурса: для имени «\MyServerPublic» имя_сервера будет «MyServer».
Примечание: Дополнительные сведения о том, как сделать приложение видимым на удаленном сетевом компьютере, см. в документации COM ( Microsoft Developer Network). Возможно, понадобится добавить раздел реестра для приложения.
Следующий код возвращает номер версии экземпляра приложения Excel, запущенного на удаленном компьютере с именем MyServer :
Если удаленный сервер не существует или недоступен, возникает ошибка во время выполнения.
Примечание: Используйте функцию CreateObject, если текущий экземпляр объекта отсутствует. Если экземпляр объекта уже запущен, запускается новый экземпляр и создается объект указанного типа. Чтобы использовать текущий экземпляр или запустить приложение и загрузить файл, следует воспользоваться функцией GetObject.
Если объект зарегистрировал себя как объект типа «единственный экземпляр», создается только один экземпляр этого объекта независимо от того, сколько раз выполнялась функция CreateObject.
Пример
В данном примере функция CreateObject используется для задания ссылки (
) в Excel. Он использует ссылку для доступа к свойству Visible приложения Excel, а затем использует метод Excel Quit , чтобы закрыть его. Наконец, сама ссылка освобождается.
Функция createobject ВБА
Я застрял на этой строке кода с 10 января, где я получил его по электронной почте, и я узнал, что мне нужно изучить модули класса, поэтому я сделал и вернулся, чтобы спросить на новой основе. Строка кода (критическое предупреждение: вы должны перейти к инструментам—> ссылки в VBE и активировать службы Microsoft WinHTTP, версия 5.1 С ранним связыванием):
для CreateObject я иду в MS Help и говорю:создает и возвращает ссылку ActiveX объект
Теперь, насколько я знаю, когда мы создаем ссылку, это только для объекта и делается так (пожалуйста, поправьте меня, если я ошибаюсь):
тогда мы создаем его вот так
зачем нам нужен CreateObject?
помогать продолжает, говоря:». объекта ActiveX«
и если я пойду, чтобы нажать ActiveX на справку, он указывает на глоссарий, который говорит: объект, который подвергается воздействию других приложения или инструменты программирования через интерфейсы автоматизации
и эта строка абсолютно ничего мне не говорит. Все, что я знал о ActiveX это
. я считаю, элементы ActiveX. (Я должен признать, хотя ActiveX всегда был туманным термином для меня)
Теперь внутри CreateObject («WinHttp.WinHttpRequest.5.1») Я просмотрел Интернет, и я не могу найти достойную помощь MS для объекта WinHttp и что так и есть. В любом случае браузер объектов имеет его как библиотеку, но кнопка справки F1 ничего не показывает. Таким образом, браузер объектов говорит, что это библиотека, я нашел ее в интернете под названием WinHttp Reference, а также как объект WinHttp. Что это из всего этого?
и ради любви к Богу, почему это называется»5.1«? я нигде не нашел WinHttpRequest.5.1 срок
Я не прошу разжевать пищу, но и любые попытки взломать ainigma действительно затягивает всю ситуацию еще больше. Пожалуйста, любой щипок, который может помочь мне взломать эту строку кода, будет тонами помощи
спасибо за просмотр моего вопроса
2 ответов
Я не буду покрывать разницу между раннее связывание и позднее связывание. Вы можете прочитать о них в этой KB статья
что я сделаю, однако, это ответить на все ваши маленькие вопросы, которые у вас есть в вашем вопросе, такие как
- что такое CreateObject?
- что такое элемент управления ActiveX?
- создает и возвращает ссылку на объект ActiveX — значение
- и ради любви к Богу, почему это называется «5.1»?
что такое CreateObject?
как я уже упоминал в комментарии выше CreateObject — это функция, которая используется в Visual Basic (vb6 и vb.net), Visual Basic для приложений (VBA) и VBScript для динамического создания экземпляра элемента управления ActiveX или COM-объекта.
что такое элемент управления ActiveX?
элемент управления ActiveX является компонентом программного объекта, который может повторно использоваться многочисленными прикладными программами. Основная технология создания элементов управления ActiveX на основе Component Object Model (COM) . В общем случае элементы ActiveX заменяют более ранние OCX (связывание объектов и встраивание пользовательских элементов управления).
элемент управления ActiveX может быть создан на любом языке программирования, который распознает компонентную объектную модель Microsoft, например Visual Basic и C++
этот элемент управления ActiveX работает в так называемом контейнере, например MS Excel, который использует Программные интерфейсы объектной модели компонента. На самом деле это помогает нам всем. Представьте себе, писать код для этих элементов управления с нуля каждый раз!
создает и возвращает ссылку на объект ActiveX — значение
позвольте мне объяснить это в связи с тем, что вы процитировали.
то, что мы делаем Dim ThatIKnow as Workbook сообщает среде выполнения, что мы создадим объект типа «Workbook» и ссылаться на него как «ThatIKnow» в нашем коде. Однако это фактически не создает объект и не выделяет никакой памяти. Память выделяется только тогда, когда объект создается с помощью New ключевое слово или любой другой способ, такой как Createobject и assiged этой переменной ThatIKnow
Итак, когда мы говорим Set ThatIKnow = Workbooks.Add или Set oXLApp = CreateObject(«Excel.Application») , мы фактически создаем объект в памяти.
и ради любви к Богу, почему это называется «5.1»?
это из-за» Божьей любви » мы произошли от приматов, которые отличались от других млекопитающих. Итак, рассмотрим версию X этих млекопитающих: D
да, Панкадж Джаджу прав, когда он упомянул, что это номер версии. Какой теперь номер версии и почему это важно?
версия управления.к.источник управления.к.контроль ревизия в простых условиях ничего, но управление изменениями документов, заявок, сбор информации и т. д. Любые перемены обычно идентифицируется по номеру или буквенному коду или его сочетанию.
это полезно, Так как это позволит нам знать текущую версию этого документа или приложения.
для дальнейшего чтения по контролю версий см. ЭТА ССЫЛКА
надеюсь, я рассмотрел все ваши вопросы? Если нет, то не стесняйтесь спрашивать.
почти так же, как
разница в том, что при первом подходе вам не нужно включать библиотеку в список «ссылки», но в качестве цены вы не будете иметь подсказок intllisense в IDE, потому что ваша ссылка является общим объектом.
вторая форма является более предпочтительной. Это позволяет VB проверять типы объектов на совместимость при их настройке или передавать их в качестве параметров. Он также дает вам подсказки, какие методы и свойства имеет объект как вы вводите его имя.
VBA CreateObject
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):
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):
then we instantiate it like this
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
. 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
2 Answers 2
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
- What is CreateObject?
- What is an ActiveX Control?
- Creates and returning a reference of an ActiveX object — Meaning
- 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.
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 😀
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.
4.2 Создание и удаление объектов
Создание объектов в VBA, раннее и позднее связывание (early/late binding), конструкция CreateObject и ключевое слово New, удаление объектов, ключевое слово Nothing
Создание объекта в VBA может производиться разными способами. Первый, самый простой способ выглядит так:
Dim oApp As Object
Set oApp = CreateObject («Word.Application»)
Это — так называемое позднее связывание (late binding). Мы вначале объявляем переменную oApp с возможностью ссылаться на любой объект, а затем присваиваем ей ссылку на создаваемый нами объект Word.Application. Такое позднее связывание хуже с точки зрения производительности и расхода оперативной памяти, кроме того, редактор Visual Basic отказывается нам подсказывать, какие свойства и методы есть у этого объекта. Поэтому позднее связывание есть смысл использовать только тогда, когда вы собираетесь хранить в этой переменной, согласно логике вашей программы, объекты разных типов. В остальных ситуациях предпочтительнее использовать раннее связывание (early binding):
Dim oApp As Word.Application
Set oApp = CreateObject(«Word.Application»)
В этом случае мы сразу присваиваем переменной oApp тип Word.Application, а потом присваиваем ей ссылку на создаваемый нами объект. Можно обойтись и без второй строки:
Dim oApp As New Word.Application
Однако ключевое слово New не может использоваться при создании зависимых объектов, с ключевым словом WithEvents и при создании переменных встроенных типов ( String, Int и т.п.), поэтому иногда необходимо будет использовать только объявление с Set. Кроме того, в языке VBScript синтаксической конструкции New нет, поэтому если вы собираетесь использовать оба языка, лучше сразу привыкать к конструкции CreateObject().
Еще одна возможность создания объекта — воспользоваться методом другого объекта, который создаст нужный нам объект и возвратит на него ссылку напрямую или через коллекцию:
Dim oApp As New Word.Application
Dim oDoc As Word.Document
Set oDoc = oApp.Documents(1)
В этом примере мы вначале создаем объект Word.Application, затем при помощи метода Add() коллекции Documents создаем в этой коллекции новый документ, потом получаем на него ссылку для переменной oDoc, а потом вызываем метод SaveAs() созданного нами объекта документа.
Удаление объектов производится очень просто:
Set объектная_переменная = nothing
Set oApp = nothing
В принципе, объект можно и не удалять — он будет удален автоматически после того, как последняя объектная переменная, которая на него ссылается, уйдет за область видимости (обычно это значит, что закончит работу процедура, в которой он используется). Однако явное удаление объектов — это «правило хорошего тона», которое позволит вам при создании серьезных приложений избежать конфликтов имен и перерасхода ресурсов.
Еще один момент, связанный с удалением объектов. Не все объекты можно удалить при помощи синтаксической конструкции Set объектная_переменная = nothing. Некоторые объекты требуют, чтобы их удаляли из памяти специальным способом. Например, объект приложения Word, который мы создавали в нашем примере, хочет, чтобы для его удаления из памяти был обязательно вызван его метод Quit() — иначе он выдаст сообщение об ошибке.