Здравствуйте, ZAMUNDA, Вы писали:
> CreateObject("MSXML2.XMLHTTP")
Далеко не всякая Web-страничка является XML-файлом.
2juicy_emad: Нужно исползовать ActiveX-компонент WebBrowser (aka Internet Explorer). Интерфейс IHtmlElement найдете в библиотеке типов system32\mshtml.tlb.
ZAM>Чтоб использовать COM-сервер в VBA проекте, надо чтоб его (COM-сервера) объекты IDispath имплементировали.
Это совершенно не обязательно. Это нужно только для позднего связывания. Просто должна быть библиотека типов + типы должны быть Variant-совместимыми.
2juicy_emad: в проект нужно добавить ссылку на ActiveX-компонент. См. меню Tools\References.
Здравствуйте, juicy_emad, Вы писали:
_> Задача такая: нужно написать на VBA программу, которая, при наличии подключения к интернет, сможет загрузить HTML-страницу по HTTP-протоколу (к примеру, http://mywebsite.org/) и получить, скажем, текстовое содержимое BODY этой странички.
Sub test8465284()
Dim myHTTP As Object
Set myHTTP = CreateObject("MSXML2.XMLHTTP")
myHTTP.Open"GET", "http://www.rsdn.ru/forum/message/2816117.1.aspx", False
myHTTP.send Empty
Debug.Print myHTTP.responseText'{Ctrl+G} нажмиMsgBox Left$(myHTTP.responseText, 128) & "...", vbInformation, "Содержимое HTML"End Sub
_> Да, и ещё. Совершенно другой вопрос: каким образом можно использовать модуль COM-Server'а в VBA-проекте? Т.е. нужно создать объект, класс которого описан в модуле COM-Server'е и вызывать его методы. Это вообще возможно?
Вот в моём примере, myHTTP это как раз экземпляр COM-объекта 'MSXML2.XMLHTTP', который написан мелкомягкими программерами (он в Windows установлен по-умолчанию).
Чтоб использовать COM-сервер в VBA проекте, надо чтоб его (COM-сервера) объекты IDispath имплементировали.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, juicy_emad, Вы писали:
A>>2juicy_emad: в проект нужно добавить ссылку на ActiveX-компонент. См. меню Tools\References.
ВОТ Я Ж ГОВОРИЛ!!! Если много сразу человеку сказать, то он ничё не поймёт!!!
_>Вот тут немного не понял. _>Ситуация такая, что я написал COM-Server в среде Delphi 7.0. Получилась библиотека типов (*.TLB) и сам исполняемый файл (*.DLL). _>И я не особо понял что нужно указывать в Tools->References->Browse.
А если ты её сразу зарегил, то она в Tools->References должна появиться и без Browse.
_>Сначала я добавил библиотеку типов (предварительно я регистрировал COM-Server в системе с пом. вызова DllRegisterServer()), после долгого поиска, я нашел добавленный компонент в списке и назывался он что-то типа "MyClass Library".
Библиотеку типов дельфя в Dll должно пихнуть, можно было просто указать указать dll.
_>Потом я попытался создать этот объект: _>
_> Dim myObj as Object
_> Set Object = CreateObject("MyClass Library")'Написано ж "ProgID" - туда его и надо.
_>
Хотя после того как ты подключил в Ref-s свою либу, имя Co-class можно вместо Object писать.
Короче если твой класс COM зовётся TTestCls, то надо писать вот так:
Dim myObj as New TTestCls
' И понеслась...
_>Вопросы: _>1.) Так ли я подключил COM-Server к проекту?
Всё так. Нажми {F2} увидишь свою либу в списке библиотек (сверху слева Combo), выбери её и увидишь свой класс.
_>2.) Как понять какой параметр задавать в фукнцию CreateObject?
Нажать {Ctrl+Shift+Space} когда курсор в параметрах (внутри скобок) CreateObject увидишь подсказку.
Ещё раз скажу, что очень помогает {F2} там и поиск есть и все параметры как на ладони и даж маленький help к каждой функции и классу.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Доброго времени суток!
Задача такая: нужно написать на VBA программу, которая, при наличии подключения к интернет, сможет загрузить HTML-страницу по HTTP-протоколу (к примеру, http://mywebsite.org/) и получить, скажем, текстовое содержимое BODY этой странички. Я знаю, что очень легко это сделать в Delphi с использованием технологии VCL: там, кажется, есть классы IHtmlDocument и IHtmlElement и сотв. св-во IHtmlElement.innerText. Вопрос: можно ли это сделать в VBA? (Я, просто, с VBA мало знаком, так что извиняюсь, если вопрос является "баяном".)
Да, и ещё. Совершенно другой вопрос: каким образом можно использовать модуль COM-Server'а в VBA-проекте? Т.е. нужно создать объект, класс которого описан в модуле COM-Server'е и вызывать его методы. Это вообще возможно?
Здравствуйте, aloch, Вы писали:
>> CreateObject("MSXML2.XMLHTTP") A>Далеко не всякая Web-страничка является XML-файлом.
А где ты там видишь IXMLDOMDocument??? Текст надо -- он получен. Давай ещё про HttpSendRequest и HttpOpenRequest бодягу разведём. ;-)
A>2juicy_emad: Нужно исползовать ActiveX-компонент WebBrowser (aka Internet Explorer). Интерфейс IHtmlElement найдете в библиотеке типов system32\mshtml.tlb.
О! Вот про это я забыл, ну бывает простите... Добавлю только, что в списке Tools->References называется она "Microsoft HTML Object Libary", если её там нет, то надо нажать "Browse..." и найти её (как уже сказано) тут "%SystemRoot%\system32\mshtml.tlb". Посмотреть про содержимое этой библиотеки можно в VBA'шном (если конечно хочется) "Object Browser", вызвать можно по {F2}.
ZAM>>Чтоб использовать COM-сервер в VBA проекте, надо чтоб его (COM-сервера) объекты IDispath имплементировали. A>Это совершенно не обязательно. Это нужно только для позднего связывания. Просто должна быть библиотека типов + типы должны быть Variant-совместимыми. A>2juicy_emad: в проект нужно добавить ссылку на ActiveX-компонент. См. меню Tools\References.
Знаю знаю... просто если человеку много сразу наговорить, то он ничего не запомнит. Прощще ж запомнить, что IDispath нужен остальное потом дойдёт.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, aloch, Вы писали:
A>2juicy_emad: в проект нужно добавить ссылку на ActiveX-компонент. См. меню Tools\References.
Вот тут немного не понял.
Ситуация такая, что я написал COM-Server в среде Delphi 7.0. Получилась библиотека типов (*.TLB) и сам исполняемый файл (*.DLL). И я не особо понял что нужно указывать в Tools->References->Browse. Сначала я добавил библиотеку типов (предварительно я регистрировал COM-Server в системе с пом. вызова DllRegisterServer()), после долгого поиска, я нашел добавленный компонент в списке и назывался он что-то типа "MyClass Library". Потом я попытался создать этот объект:
Dim myObj as Object
Set Object = CreateObject("MyClass Library")
В результате при выполнении последней строчки получилась ошибка: ~"Cannot create obejct".
Думаю, что проблема в том, что я неправильно задал параметр функции CreateObject.
Вопросы:
1.) Так ли я подключил COM-Server к проекту?
2.) Как понять какой параметр задавать в фукнцию CreateObject?