Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

VBA(Word): нужен дескриптор окна (hWnd)!

2.8K
09 апреля 2003 года
Бер
9 / / 22.03.2003
Подскажите, пожалуйста, как из VBA в Word-е получить дескриптор окна для последующей передачи во внешние процедуры.
В Access97 это просто: Application.hWndAccessApp.

PS. Если есть различия по версиям Word,
то хотя бы для Word2002 (по возможности и для Word97/2000)
267
09 апреля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Бер
Подскажите, пожалуйста, как из VBA в Word-е получить дескриптор окна для последующей передачи во внешние процедуры.
В Access97 это просто: Application.hWndAccessApp.

PS. Если есть различия по версиям Word,
то хотя бы для Word2002 (по возможности и для Word97/2000)



Вот смотри какую штуку я нашел в хелпе к 97-му Ворду. Может, она тебе поможет... (просто самому мне это никогда не нужно было):

Код:
' Описываем необходимые процедуры 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
258
09 апреля 2003 года
SergeySV
1.5K / / 19.03.2003
Так вроде всегда в VBA(VBE) это свойство болтается: Application.Hwnd
2.8K
09 апреля 2003 года
Бер
9 / / 22.03.2003
Цитата:
Originally posted by SergeySV
Так вроде всегда в VBA(VBE) это свойство болтается: Application.Hwnd



Хочется, чтобы это было действительно так, хотя я его там искал и раньше - ничего.
Если ты его там видел, попробуй, пожалуйста, запустить Word и найти его там.
О результатах обязательно сообщи.

2.8K
09 апреля 2003 года
Бер
9 / / 22.03.2003
Цитата:
Originally posted by Cutty Sark

Вот смотри какую штуку я нашел в хелпе к 97-му Ворду. Может, она тебе поможет... (просто самому мне это никогда не нужно было): ...



Я этот help использовал раньше, когда из Access запускал Word. Ты прав, это можно использовать и в данном случае. Спасибо.

А может все-таки есть у wordVBA собственные функции, кто знает отзовитесь!

258
10 апреля 2003 года
SergeySV
1.5K / / 19.03.2003
Действительно прикольно, для Excel это свойство есть - Application.Hwnd, а в Word нет.... :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог