Getobject vba excel — Мир ПК

Getobject vba excel

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

Pathname Необязательный аргумент-значение типа Variant(String) . Полная спецификация пути и имя файла, содержащего отыскиваемый объект. В случае, если аргумент опущен, параметр Class является обязательным
Class Необязательный аргумент-значение типа Variant(String) .Строка, отражающая класс объекта

Параметр Class имеет синтаксис appname.objecttype, в котором присутствуют следующие элементы:

Appname Обязательный. Значение типа Variant(String) . Имя приложения, предоставляющего объект
ObjectType Обязательный. Значение типа Variant(String) . Tип или класс создаваемого объекта

Функция GetObject применяется для доступа в объекту ActiveX, находящемуся в файле, и для присваивания этого объекта объектной переменной. Для присваивания объекта, возвращенного функцией GetObject, объектной переменной используется оператор Set. Например:

При исполнении данного кода производится запуск приложения, указанного параметром pathname, и активизация объекта в заданном файле.

Если значением параметра pathname является пустая строка («»), функция GetObject возвращает новый экземпляр объекта заданного типа. В случае, если параметр pathname опущен, функция GetObject возвращает активный в данный момент объект заданного типа. Если объекта указанного типа не существует, возникает ошибка.

Ряд приложений допускают активизацию части файла. Для этого нужно добавить после имени файла восклицательный знак (!) и поместить вслед за ним строку, задающую ту часть файла, которую требуется активизировать. Дополнительные сведения относительно составления такой строки смотрите в документации на то приложение, которое создает объект.

К примеру, в графическом приложении может присутствовать несколько уровней рисования, хранящихся в файле. Для активизации уровня под названием SCHEMA.CAD можно воспользоваться следующим кодом:

В тех случаях, когда не указан класс объекта (параметр class), автоматизация (Automation) находит приложение, которое нужно запустить, на основе заданного имени файла. Однако ряд файлов могут поддерживать несколько классов объектов. Например, приложение для рисования может поддерживать три различных типа объектов: объект Application, объект Drawing и объект Toolbar, которые являются частью одного файла. Для указания требуемого объекта нужно указать необязательный параметр class. Например:

В приведенном примере FIGMENT – это имя графического приложения, а DRAWING – один из поддерживаемых этим приложением типов объектов.

После активизации объекта, производится ссылка на него в коде с использованием определенной объектной переменной,. В предыдущем примере доступ к свойствам и методам нового объекта осуществляется с помощью объектной переменной MyObject . Например:

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

Если объект производит само регистрацию в качестве объекта с единственным экземпляром, то, независимо от числа обращений к функции CreateObject, будет создан только один экземпляр такого объекта. В случае наличия только одного экземпляра объекта, функция GetObject, при ее вызове с использованием синтаксиса с указанием пустой строки («»), всегда возвращает один и тот же экземпляр, а при отсутствии параметра pathname возникает ошибка. Функцию GetObject можно применять для получения ссылки на класс, созданный в Visual Basic.

Читать еще:  Как посчитать максимальное значение в excel

Функция GetObject

Примечание: Функция, метод, объект или свойство, описанные в данном разделе, отключаются, если служба обработки выражений Microsoft Jet выполняется в режиме песочницы, который не позволяет рассчитывать потенциально небезопасные выражения. Для получения дополнительных сведений выполните в справке поиск по словам «режим песочницы».

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

Функция GetObject имеет следующие аргументы:

Необязательный аргумент. Variant ( String). Полный путь к файлу, содержащему объект, который требуется получить. Если аргумент имя_пути пропущен, класс является обязательным.

Необязательный аргумент. Variant ( String). Строка, представляющая класс объекта.

Аргумент класс использует синтаксис имя_приложения . тип_объекта и содержит следующие части:

Обязательный элемент. Variant ( String). Имя приложения, предоставляющего объект.

Обязательный элемент. Variant ( String). Тип или класс объекта, который требуется создать.

Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.

Используйте функцию GetObject для доступа к объекту ActiveX из файла и назначения его объектной переменной. Используйте оператор Set для назначения объекта, возвращенного функцией GetObject, объектной переменной. Например:

При выполнении этого кода приложение, связанное с указанным именем_пути, запускается, а объект в указанном файле активируется.

Если имя_пути содержит пустую строку («»), GetObject возвращает новый экземпляр объекта указанного типа. Если аргумент имя_пути пропущен, функция GetObject возвращает текущий активный объект указанного типа. Если такой объект не существует, возникает ошибка.

Некоторые приложения разрешают активировать часть файла. Добавьте в конец имени файла восклицательный знак ( !), а после него строку, указывающую часть файла, которую требуется активировать. Сведения о создании этой строки см. в документации приложения, в котором был создан объект.

Например, в графическом редакторе может быть несколько уровней для рисунка, сохраненного в файле. Вы можете использовать следующий код для активации уровня рисунка с названием SCHEMA.CAD :

Если класс объекта не был задан, автоматизация определяет запускаемое приложение и активируемый объект на основе предоставленного имени файла. Некоторые файлы, однако, могут поддерживать несколько классов объектов. Например, рисунок может поддерживать три различных типа объектов — объект Application, объект Drawing и объект Toolbar, —каждый из которых является частью одного и того же файла. Чтобы указать, какой объект в файле требуется активировать, используйте необязательный аргумент класс. Например:

Читать еще:  Как найти слово в тексте excel

В этом примере FIGMENT является названием графического редактора, а DRAWING — именем поддерживаемого им типа объекта.

Если объект активирован, он указывается в коде с помощью определенной вами объектной переменной. В предыдущем примере доступ к свойствам и методам нового объекта осуществлялся с помощью объектной переменной MyObject . Например:

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

Если объект зарегистрировал себя как объект типа «единственный экземпляр», создается только один экземпляр этого объекта независимо от того, сколько раз выполнялась функция CreateObject. При наличии объекта с типом «единственный экземпляр» функция GetObject всегда возвращает один и тот же экземпляр, когда она вызывается с использованием синтаксиса пустой строки («»). При пропуске аргумента имя_пути вызов завершается ошибкой. Функцию GetObject нельзя использовать для получения ссылки на класс, созданный с помощью Visual Basic.

Getobject vba excel

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

Необязательный. Variant (String). Полный путь и имя файла, содержащего объект, который следует загрузить. Если аргумент pathname опущен, должен быть указан аргумент class.

Функция использует именованные аргументы. Если текущего экземпляра объекта не существует или запуск объекта из загруженного файла являются нежелательными, следует использовать функцию CreateObject.
Если объект зарегистрирован как уникальный, создается только один экземпляр этого объекта независимо от числа вызовов функции CreateObject. Для уникального объекта функция GetObject всегда возвращает один и тот же экземпляр, если при ее вызове указана пустая строка («»). Ошибка возникает, если аргумент pathname опущен. Нельзя использовать функцию GetObject для получения ссылки на класс, созданный с помощью Visual Basic. Если pathname является пустой строкой («»), GetObject возвращает новый экземпляр объекта указанного типа. Если аргумент pathname опущен, GetObject возвращает текущий активный объект указанного типа. Если ни одного объекта указанного типа не существует, возникает ошибка.

‘В данном примере функция GetObject создает ссылку на конкретный лист
‘Microsoft Excel Worksheet (MyXL). Для того чтобы сделать Microsoft Excel
‘видимым, закрыть его и т.д., используется свойство Application объекта
‘Worksheet. С помощью двух вызовов API процедура Sub DetectExcel ищет
‘Microsoft Excel и, если он выполняется, вводит его в таблицу выполняемых
‘объектов (Running Object Table). Первый вызов GetObject приводит к ошибке,
‘если Microsoft Excel еще не запущен. В этой программе ошибка приводит к
‘установке значения True для флага ExcelWasNotRunning. Второй вызов GetObject
‘указывает открываемый файл. Если Microsoft Excel не был запущен, то в
‘результате второго вызова функции это приложение запускается, при этом
‘возвращается ссылка на лист, соответствующий указанному файлу. Файл
‘mytest.xls должен существовать в указанном каталоге; в противном случае
‘возникает ошибка Visual Basic «Ошибка программирования объектов». Далее
‘в программе делаются видимыми окно Microsoft Excel и окно, содержащее
‘указанный лист. И наконец, если Microsoft Excel не выполнялся при запуске
‘этой программы, метод Quit объекта Application закрывает Microsoft Excel.
‘Если это приложение выполнялось до запуска данной программы, попытка
‘закрыть его не предпринимается. Ссылка на лист освобождается путем
‘указания для нее состояния Nothing.

Читать еще:  Ошибка при сохранении файла excel

‘Описываем необходимые процедуры API:
Declare Function FindWindow Lib «user32» Alias _
«FindWindowA» (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib «user32» Alias _
«SendMessageA» (ByVal hWnd as Long,ByVal wMsg as Long _
ByVal wParam as Long ByVal lParam As Long) As Long

Sub GetExcel()
Dim MyXL As Object ‘Переменная для сохранения ссылки на Microsoft Excel.
Dim ExcelWasNotRunning As Boolean ‘Флаг для выхода из приложения.

‘Проверка, выполняется ли Microsoft Excel.
On Error Resume Next ‘Отложенный перехват ошибок.
‘Функция GetObject, вызванная без указания первого аргумента,
‘возвращает ссылку на экземпляр приложения. Если это приложение
‘не запущено, возвращается ошибка. Обратите внимание на запятую,
‘стоящую на месте отсутствующего первого аргумента.
Set MyXL = GetObject(, «Excel.Application»)
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ‘Очищаем объект Err на случай ошибки.

‘Проверка Excel. Если Excel выполняется,
‘он вводится в таблицу выполняемых объектов (Running Object table).
DetectExcel

‘Задаем в объектной переменной ссылку на открываемый файл.
Set MyXL = GetObject(«c:vb4MYTEST.XLS»)

‘Делаем видимым Excel с помощью свойства Application. Затем делаем
‘видимым окно, содержащее файл, с помощью семейства Windows объекта,
‘определяемого ссылкой MyXL.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True

‘Здесь помещаем инструкции
‘по обработке вызванного файла.
‘.
‘Если приложение Microsoft Excel не выполнялось при запуске данной
‘программы, закрываем его с помощью метода Quit свойства Application.
‘Отметим, что при попытке выхода из Microsoft Excel строка заголовка
‘мигает и выводится приглашение сохранить все загруженные файлы.
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF

Set MyXL = Nothing ‘Освобождаем ссылку на приложение и электронную таблицу
End Sub

Sub DetectExcel()
‘Процедура находит выполняемый Excel и регистрирует его
Const WM_USER = 1024
Dim hWnd As Long
‘Если Excel выполняется, этот вызов API возвращает его дескриптор
hWnd = FindWindow(«XLMAIN», 0)
If hWnd = 0 Then ‘0 означает, что Excel не выполняется
Exit Sub
Else
‘Excel выполняется. Используйте функцию API SendMessage, чтобы
‘ввести его в таблицу выполняемых объектов (Running Object Table).

SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub

Запись опубликована в рубрике Excel. Добавьте в закладки постоянную ссылку.