Поиск…


замечания

В своем простейшем случае CreateObject создает экземпляр объекта, тогда как GetObject получает существующий экземпляр объекта. Определение того, может ли объект быть создан или получен, будет зависеть от его свойства Instancing . Некоторые объекты SingleUse (например, WMI) и не могут быть созданы, если они уже существуют. Другие объекты (например, Excel) - это MultiUse и позволяют запускать сразу несколько экземпляров. Если экземпляр объекта еще не существует и вы GetObject , вы получите следующее сообщение Run-time error '429': ActiveX component can't create object .

GetObject требует наличия хотя бы одного из этих двух необязательных параметров:

  1. Pathname - Variant (String): полный путь, включая имя файла, файла, содержащего объект. Этот параметр является необязательным, но Class требуется, если Pathname опущено.
  2. Class - Variant (String): Строка, представляющая формальное определение (Application и ObjectType) объекта. Класс требуется, если Pathname опущен.

CreateObject имеет один обязательный параметр и один необязательный параметр:

  1. Class - Variant (String): Строка, представляющая формальное определение (Application и ObjectType) объекта. Класс является обязательным параметром.
  2. Servername - Variant (String): имя удаленного компьютера, на котором будет создан объект. Если этот параметр опущен, объект будет создан на локальном компьютере.

Класс всегда состоит из двух частей в виде Application.ObjectType :

  1. Приложение - имя приложения, частью которого является объект. |
  2. Тип объекта - тип создаваемого объекта. |

Некоторые примеры классов:

  1. Word.Application
  2. Лист Excel
  3. Scripting.FileSystemObject

Демонстрация GetObject и CreateObject

Функция MSDN-GetObject

Возвращает ссылку на объект, предоставленный компонентом ActiveX.

Используйте функцию GetObject, когда есть текущий экземпляр объекта, или если вы хотите создать объект с уже загруженным файлом. Если текущий экземпляр отсутствует, и вы не хотите, чтобы объект запускался с загруженным файлом, используйте функцию CreateObject.

Sub CreateVSGet()
    Dim ThisXLApp As Excel.Application 'An example of early binding
    Dim AnotherXLApp As Object 'An example of late binding
    Dim ThisNewWB As Workbook
    Dim AnotherNewWB As Workbook
    Dim wb As Workbook
    
    'Get this instance of Excel
    Set ThisXLApp = GetObject(ThisWorkbook.Name).Application
    'Create another instance of Excel
    Set AnotherXLApp = CreateObject("Excel.Application")
    'Make the 2nd instance visible
    AnotherXLApp.Visible = True
    'Add a workbook to the 2nd instance
    Set AnotherNewWB = AnotherXLApp.Workbooks.Add
    'Add a sheet to the 2nd instance
    AnotherNewWB.Sheets.Add
    
    'You should now have 2 instances of Excel open
    'The 1st instance has 1 workbook: Book1
    'The 2nd instance has 1 workbook: Book2
    
    'Lets add another workbook to our 1st instance
    Set ThisNewWB = ThisXLApp.Workbooks.Add
    'Now loop through the workbooks and show their names
    For Each wb In ThisXLApp.Workbooks
        Debug.Print wb.Name
    Next
    'Now the 1st instance has 2 workbooks: Book1 and Book3
    'If you close the first instance of Excel,
    'Book1 and Book3 will close, but book2 will still be open
    
End Sub


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow