GetObject
и CreateObject
оба принимают параметр String
, представляющий ProgID - это буквальное строковое значение, присутствующее в реестре Windows, связывающее класс с указанной c библиотекой типов.
Следовательно, вы хотите, чтобы этот аргумент был заключен в двойные кавычки, которые разделяют строковый литерал:
Set WordApp = GetObject(, "Word.Application")
Причина, по которой вы получаете ошибку, заключается в том, что неявный вызов члена по умолчанию в Word.Application
, который возвращает значение Word.Application.Name
, то есть строковое значение "Microsoft Word"
, а «Microsoft Word» не является допустимым, зарегистрированным ProgID.
Имеет ссылку на объектную модель Word в вашем проекте означает, что вы можете сделать это:
Dim WordApp As Word.Application
Set WordApp = GetObject(, "Word.Application")
И тогда каждый вызов члена, сделанный для этой WordApp
объектной переменной, будет проверяться во время компиляции (вот что означает early-bound ). Это также означает, что вы можете сделать это:
Dim WordApp As Word.Application
Set WordApp = New Word.Application
Вместо этого:
Dim WordApp As Word.Application
Set WordApp = CreateObject("Word.Application")
Со ссылкой на библиотеку объектов Word все константы wdXxxxx
определены и могут использоваться. С другой стороны, ваши пользователи должны иметь точно такую же версию библиотеки, на которую они ссылаются, на своих компьютерах.
Если ваши пользователи используют версии Word / Office, отличные от вас, подумайте поздняя привязка вместо.
Вы потеряете возможность напрямую использовать wdXxxxx
константы (вам нужно будет использовать их базовые значения или определить их как Const
идентификаторы или Enum
участников самостоятельно). Вы также потеряете проверку во время компиляции, intellisense / autocompletion, возможность New
поднять любой класс из библиотеки Word, и Option Explicit
не сможет защитить вас от опечатки в любом из членов с поздней привязкой звонки, которые вы делаете (ожидайте ошибку времени выполнения 438, если вы делаете что-то не так), но вы также потеряете зависимость от указанной c версии Word / Office.
Чтобы использовать позднюю привязку, вам нужно объявить вещи As Object
, например:
Dim WordApp As Object
Set WordApp = GetObject(, "Word.Application")
Обратите внимание, что это не может работать, даже с двойными кавычками:
'Set WordDoc = GetObject(, "Word.Document")
Поскольку вы не можете создать Word.Document
- только Word может сделать это, по той же причине, по которой вы не можете создать Excel.Worksheet
, только Excel может сделать это. Чтобы создать Word.Document
, вам нужно вызвать элемент WordApp
, который создаст новый документ (и вернуть ссылку на него, которую вы можете записать в локальной переменной):
Dim WordDoc As Object 'early-bound: As Word.Document
'Set WordDoc = WordApp.ActiveDocument
Set WordDoc = WordApp.Documents.Add
MsgBox WordDoc.Name