Пример использования 'В данном примере функция 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.
'Описываем необходимые процедуры 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:\vb4\MYTEST.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 |