Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/88: Рейтинг темы: голосов - 88, средняя оценка - 4.51
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
1

VBA управление IE.....

01.07.2011, 08:28. Показов 17592. Ответов 74
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сильно нужна помощь.
Помогите кто шарит в VBA. нашел в интернете статью как получить интерфейс объекта Document
вот код который я пытался адаптировать для Access
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Option Compare Database
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
lpClassName As String, ByVal lpWindowName As String) As Long
 
Private Declare Function EnumChildWindows _
Lib "user32" (ByVal hwnd As Long, ByVal _
lpWndProc As Long, ByVal lp As Long) As Long
 
Private Declare Function ObjectFromLresult Lib "oleacc" (ByVal lResult As Long, riid As UUID, _
   ByVal wParam As Long, ppvObject As Any) As Long
    
Private Declare Function RegisterWindowMessage Lib "user32.dll" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
    
Private Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
    
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
 
  
    Private Type UUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
    End Type
    
Private Const SMTO_ABORTIFHUNG = &H2
 
 
Private Sub Êíîïêà0_Click()
Dim hW As Long
Dim HTMLDoc As Object
 
hW = FindWindow(vbNullString, "Àâòîðèçàöèÿ - Microsoft Internet Explorer" & Chr(0))
MsgBox (hW)
Set HTMLDoc = IEDOMFromhWnd(hW)
HTMLDoc.navigate = "about:blank"
End Sub
 
Public Function IEDOMFromhWnd(ByVal hwnd As Long) As IHTMLDocument
  Dim IID_IHTMLDocument As UUID
  Dim hWndChild As Long
  Dim lRes As Long
  Dim lMsg As Long
  Dim hr As Long
 
  If hwnd <> 0 Then
    If Not IsIEServerWindow(hwnd) Then
      EnumChildWindows hwnd, AddressOf EnumChildProc, hwnd
    End If
    If hwnd <> 0 Then
      lMsg = RegisterWindowMessage("WM_HTML_GETOBJECT")
      SendMessageTimeout hwnd, lMsg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes
      If lRes Then
        With IID_IHTMLDocument
          .Data1 = &H626FC520
          .Data2 = &HA41E
          .Data3 = &H11CF
          .Data4(0) = &HA7
          .Data4(1) = &H31
          .Data4(2) = &H0
          .Data4(3) = &HA0
          .Data4(4) = &HC9
          .Data4(5) = &H8
          .Data4(6) = &H26
          .Data4(7) = &H37
        End With
        hr = ObjectFromLresult(lRes, IID_IHTMLDocument, 0, IEDOMFromhWnd)
      End If
    End If
  End If
End Function
 
Private Function IsIEServerWindow(ByVal hwnd As Long) As Boolean
  Dim lRes As Long
  Dim sClassName As String
  sClassName = String$(100, 0)
  lRes = GetClassName(hwnd, sClassName, Len(sClassName))
  sClassName = Left$(sClassName, lRes)
  IsIEServerWindow = StrComp(sClassName, "Internet Explorer_Server", vbTextCompare) = 0
End Function
 
 
Public Function EnumChildProc(ByVal hW As Long, lParam As Long) As Long
  If IsIEServerWindow(hW) Then
    lParam = hW
  Else
    EnumChildProc = 1
  End If
End Function
не знаю почему выдает ошибку в AddressOf EnumChildProc - Invalid use of AddressOf operator
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2011, 08:28
Ответы с готовыми решениями:

Управление приложениями посредством VBA
Доброе время суток! Кто-нибудь знает, может ли VBA управлять приложениями. Например, посредством...

Управление звуком через VBA
можно ли как-то сделать кнопку в excel, чтоб при её нажатии звук сводился либо к определённому...

Управление дорожным движением в Excel,VBA
Помогите решить задачу. Нужно сделать задачу в Excel и написать код &quot;Управление дорожным...

Управление Java приложением средствами VBA
Доброго времени суток, форумчане! Требуется автоматизировать повторяющиеся действия: копирование...

74
Заблокирован
01.07.2011, 09:38 2
cronbes,
а в чём состоит задача?
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
01.07.2011, 09:40 3
Цитата Сообщение от cronbes Посмотреть сообщение
не знаю почему выдает ошибку в AddressOf EnumChildProc - Invalid use of AddressOf operator
У меня не выдает. Зато почему-то бесконечно идет вызов функции EnumChildProc и она убивает Аксесс.
0
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
01.07.2011, 11:48  [ТС] 4
Цитата Сообщение от Gibboustooth Посмотреть сообщение
У меня не выдает. Зато почему-то бесконечно идет вызов функции EnumChildProc и она убивает Аксесс.
Да я тоже сейчас, в модуль вынес некоторые функции, работать стало только тоже Access убивает ( и даже ошибку не выдает, просто вылетает(офис 2007 у меня)
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
01.07.2011, 11:53 5
Цитата Сообщение от cronbes Посмотреть сообщение
Да я тоже сейчас, в модуль вынес некоторые функции, работать стало только тоже Access убивает ( и даже ошибку не выдает, просто вылетает(офис 2007 у меня)
Ага, то же самое.
0
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
01.07.2011, 12:12  [ТС] 6
Цитата Сообщение от Busine2009 Посмотреть сообщение
cronbes,
а в чём состоит задача?
да дело в управлении загруженном в браузере объектом Document (заполнение Инпутов, нажатие на кнопки, получение информации из ячеек таблиц в зависимости от определенных условий)
нашел тему где можно создать объект, потом сделать Navigate. А мне не пойдет все время загружать, потому что там страница на лету формируется, и по URL я все время буду попадать не куда мне надо, поетому нужно работать уже с загруженными страницами

Добавлено через 9 минут
Идея Того кода который привел самая привлекательная, сижу вот щас пробую разбираться в тонкостях каждой функции, надеюсь найти в чем незадача из-за чего ошибки
0
Заблокирован
01.07.2011, 12:44 7
cronbes,
а вообще, вот у вас есть Access, что вам нужно сделать в Internet Explorere? Какие-то данные туда вывести или что?
0
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
01.07.2011, 13:26  [ТС] 8
Цитата Сообщение от Busine2009 Посмотреть сообщение
cronbes,
а вообще, вот у вас есть Access, что вам нужно сделать в Internet Explorere? Какие-то данные туда вывести или что?
дело в том что я в Access сделал форму на которой различные контролы, чекбоксы и поля
1) все это для того чтобы сформировать письмо в Вордовский документ, и характеристики которые будут в этом документе, отразить в Информационной системе.
2) на форме Access есть у меня текстбокс который анализирует записанный в него адрес, и расставляет слова по местам (форматирует его в соответствии с почтовым стандартом)
3) Главная идея - вот допустим я открыл раздел своей ИС затем нажал на кнопку в Access и поехало, должна считаться инфа (Адрес организации какойнибудь) с определенного места на страничке затем скопироваться в поле Access там отформатироваться, а затем нужно автоматом открыть другой раздел ИС и там в поля внести информацию из переменных.
0
Заблокирован
01.07.2011, 13:52 9
cronbes,
т.е. такая ситуация:
  1. У вас есть несколько сайтов (например, www.1.ru, www.2.ru).
  2. Вы открываете один из сайтов (например, www.1.ru), используя браузер Internet Explorer.
  3. Переходите в базу данных Access. Нажимаете там кнопку.
  4. С сайта www.1.ru копируется в текстовое поле базы данных Access почтовый адрес.
  5. Этот адрес формируется с почтовыми правилами и передаётся на сайт www.2.ru.
0
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
02.07.2011, 15:40  [ТС] 10
Busine2009,
ну да примерно так, только там адрес все время скажем такой http://eis.rtcomm.ru/main.jsp
тоесть я открываю там один раздел там беру адрес, потом открываю другой раздел и добавляю его туда, но при этом main.jsp

Добавлено через 2 минуты
или main.asp ))) чет забыл, но всеравно URL не меняется
0
Заблокирован
02.07.2011, 16:21 11
cronbes,
а вы сами делали этот сайт? В каком элементе сайта находится адрес (ну который нужно поместить в Access)?
0
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
02.07.2011, 17:46  [ТС] 12
Busine2009,
чтото написал, пади никто не поймет ) щас попробую по другому

1) Браузер Internet Explorer
2) У нас выделенная сеть, свой ресурс Единая система
3) Адрес на ресурс примерно такой 4) Когда захожу там в подсистемы или подразделы не меняется
5) Пока я работаю с формой в Access по нажатию кнопки нужно чтобы Адрес брался из страницы загруженной в данный момент - обрабатывался в поле формы - вставлялся в поле другого раздела Информационной системы
0
Заблокирован
02.07.2011, 17:51 13
Цитата Сообщение от cronbes Посмотреть сообщение
У нас выделенная сеть, свой ресурс Единая система
мы же не с сетью работаем, а с тем, что находится в программе Internet Explorer. То, что находится в программе Internet Explorer можно просто сайтом назвать (хотя могу ошибаться).

Цитата Сообщение от cronbes Посмотреть сообщение
Пока я работаю с формой в Access по нажатию кнопки нужно чтобы Адрес брался из страницы загруженной в данный момент - обрабатывался в поле формы - вставлялся в поле другого раздела Информационной системы
это уже выяснили. Был задан другой вопрос: в каком элементе сайта находится этот адрес. Я ни разу не брал информацию с сайтов, поэтому не знаю, как брать информацию с них. Сейчас смотрю в интернете.
0
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
02.07.2011, 18:54  [ТС] 14
Busine2009,
ну да все правильно..
давай его сайтом называть.. Адрес в табличке находится (скажем <table><tr><td>Адрес</td></tr></table>), я щас пока пробую загруженный сайт получить через GetObject
0
Заблокирован
03.07.2011, 18:34 15
Цитата Сообщение от cronbes Посмотреть сообщение
я щас пока пробую загруженный сайт получить через GetObject
тоже так пробовал, потом нашёл в интернете на английском языке, что нельзя использовать в отношении Internet Explorer GetObject.
0
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
04.07.2011, 11:04  [ТС] 16
Цитата Сообщение от Busine2009 Посмотреть сообщение
тоже так пробовал, потом нашёл в интернете на английском языке, что нельзя использовать в отношении Internet Explorer GetObject.
Чтото тоже через GetObject не получилось..
Еще есть идея через Handle браузера обратиться к Document. Нахожу Handle Эксплорера, и если передаю идентификатор окна допустим некоторым функциям API то можно с окном работать(закрывать его, сворачивать и т.д) а как через него добраться к Document не знаю.
0
Заблокирован
04.07.2011, 11:09 17
cronbes,
я так понял, что API надо начинать изучать с самоучителей и справочников. В интернете недостаточно информации по API.

Например, надо сделать какое-то действие, а как узнать, какой функцией воспользоваться? Этих функций тысяча что ли.

Я сейчас скачиваю самоучители и справочники по API. Видимо быстро не получится разобраться.
Да и сама идея определять программу по диалоговому окну (FindWindow) глупая какая-то.
0
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
04.07.2011, 11:11  [ТС] 18
Почемуто мне кажется что это бесполезная затея уже, так и будем тут в ручную копи пасте делать )
0
Заблокирован
04.07.2011, 11:14 19
cronbes,
насчёт пасти не знаю, а копи вполне реально - есть же программы, которые просматривают веб-страницы и берут нужную информацию.

Просто эта проблема не решается в один день, т.к. знания нужны хотя бы базовые и нужно знать, какими функциями API воспользоваться (этих функций около тысячи).
0
10 / 10 / 1
Регистрация: 16.03.2011
Сообщений: 73
04.07.2011, 11:27  [ТС] 20
Неее все равно буду думать ))) должен быть какойто способ, если через Navigate я могу же получить объект
0
04.07.2011, 11:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2011, 11:27
Помогаю со студенческими работами здесь

Управление приложением через VBA
Здравствуйте! Имеется приложение на C#, VS2010. Существует ли способ добавить в него поддержку...

Управление скриптами VBA через ASP-скрипты
Здравствуйте! Я столкнулась с необходимостью управления скриптами VBA через web-интерфейс. Т.е.,...

Управление ошибками в VBA. Операторы On Error, Resume, объект Err
Информация из интернета: Ошибки в VBA можно разделить: Возбуждение ошибки может быть сделано...

Реализовать алгоритм работы планировщика. Управление виртуальной памятью. Управление файловой системой
Разработка программы менеджера памяти. Свопинг. Сегментная схема организации памяти. Управление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru