Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Справочники

МЕНЮ САЙТА
  • 1
  • 2
  • 3

КАТЕГОРИИ РАЗДЕЛА

ОПРОСЫ
Какой версией Excel Вы пользуетесь?
Всего ответов: 35704
Главная » Справочники » Функции VBA » Функции работы с объектами

GetObject

GetObject

Функция GetObject

GetObject([Pathname] [Class])

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

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

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


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

Примечания

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

Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

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

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

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

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

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

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

Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

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

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

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"
Замечание Функцию GetObject полезно использовать в тех случаях, когда уже имеется текущий экземпляр объекта, или при необходимости создать объект из уже загруженного файла. Если же текущий экземпляр объекта отсутствует и нежелательно запускать объект из загруженного файла, применяется функция CreateObject.

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

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

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

' Задаем в объектной переменной ссылку на открываемый файл
 Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

' Делаем видимым Microsoft Excel с помощью его свойства Application. 
' Делаем видимым окно, содержащее файл, с помощью 
' коллекции Windows, задаваемой объектной ссылкой MyXL
 MyXL.Application.Visible = True
 MyXL.Parent.Windows(1).Visible = True
  Do manipulations of your file here.
 ' ...
' Если этот экземпляр 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
Категория
Функции работы с объектами

Счетчики: 6239 | Добавил: Serge_007
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!