В объектной модели Excel нет класса с Excel.Sheet
progID. Вы, вероятно, имели в виду Excel.Worksheet
, но это тоже не сработает, и это не из-за CreateObject
или какой-либо неясной функции безопасности.
Проще говоря, не все классы / типы могут быть созданы : в библиотеке типов Excel Application
есть, и это все: все остальное необходимо создавать в объектной модели, используя фабричные методы предоставляется этим API.
Другими словами, единственный способ создать Excel.Worksheet
- это создать его в Excel.
Set excelSheet = Excel.Application.ActiveWorkbook.Worksheets.Add
То же самое с Excel.Workbook
:
Set excelBook = Excel.Application.Workbooks.Add
Есть другие способы (например, копирование существующего Worksheet
без указания аргумента Target
создаст новый Workbook
, содержащий копию этого источника Worksheet
), но правило большой палец, если вы не можете New
создать класс в указанной библиотеке типов, есть небольшой шанс, что CreateObject
сможет сделать что-то лучше (если только регистрация типа явно не предотвращает раннее связывание).
Вопрос был отредактирован, но этот ответ стоит: не используйте CreateObject
для создания экземпляров классов, которые уже разрешены и легко доступны.
Set objXml = New MSXML2.DOMDocument60 'works fine
Если вы действительно хотите использовать CreateObject
, тогда вам нужно использовать строки progID, которые существуют в вашем реестре.
Set objXml = CreateObject("MSXML2.DOMDocument60") ' blows up on my machine as well
Set objXml = CreateObject("MSXML2.DOMDocument") ' works fine
Но использование CreateObject
для создания экземпляра класса, о котором компилятор уже знает, - очень и очень окольный способ сделать это.