Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Помогите с Excel


Автор: slang 20.7.2005, 05:23
Подскажите, возможно сделать так, чтобы открытая книга Excel, например раз в 10 минут открывала Web-страницу с адресом, указанным в одной из ячеек. Затем необходимо дождатся открытия этой страницы (т.е. результат "Готово", если ошибка - перегрузить) и закрыть обозреватель, если его необходимо открывать вообще.

Автор: Akina 20.7.2005, 08:15
Так сделать возможно. Но это мне представляется... непонятным, что ли... а даже если оно должно быть именно так как описано (весьма, кстати, сумбурно) - имхо найдется более рациональный способ нежели "в лоб".

Попробуй описАть задачу до понятного...

Автор: slang 20.7.2005, 08:31
Необходимо отправить URL запрос по адресу www.avtograd55.ru и передать через GET параметры, вычисляющиеся в Excel.
Например:
http://avtograd55.ru/cgi-bin/sms33.cgi?Prefix=0000&phone=0000000&message=
У меня сотовый оператор не поддерживает прием SMS с e-mail, но есть сайт с которого SMS можно отправлять, а мне необходимо чтобы компьютер с работы отправлял SMS на мой телефон с различными данными, существующими и изменяющимися на листе Excel. Выше приведенная строка (с некоторыми изменениями, конечно) отправит на мой телефон SMS с текстом "privet seychas A1-1234321"

Автор: Akina 20.7.2005, 08:47
Можно это сделать и модулем.
Через API отправить запрос на хост - пара пустяков... но писАть-отлаживать муторно.
Гораздо более простой (имхо) путь - ActiveWorkbook.FollowHyperlink

Автор: slang 20.7.2005, 10:00
Можно чуть поподробнее про ActiveWorkbook.FollowHyperlink
В справочнике из Office только синтаксис. В справочниках, которые есть ничего, а перевод идти за ссылкой мало что объясняет. Можно узнать как это действует. И возможна-ли будет цикличность в этом случае, например делать это действие каждые 10 минут? Как организовать в Office эту цикличность.
функция, я так понимаю
Код

Sub FollowHyperlink(A1, [SubAddress], NewWindow, [AddHistory], [ExtraInfo], [Method], [HeaderInfo])

Что обозначают аргументы в квадратных скобках?

Автор: Akina 20.7.2005, 10:20
Цитата(MSDN)
FollowHyperlink Method


Displays a cached document, if it’s already been downloaded. Otherwise, this method resolves the hyperlink, downloads the target document, and displays the document in the appropriate application.

expression.FollowHyperlink(Address, SubAddress, NewWindow, AddHistory, ExtraInfo, Method, HeaderInfo)

expression  Required. An expression that returns a Workbook object.

Address  Required String. The address of the target document.

SubAddress  Optional Variant. The location within the target document. The default value is the empty string.

NewWindow  Optional Variant. True to display the target application in a new window. The default value is False.

AddHistory  Optional Variant. Not used. Reserved for future use.

ExtraInfo  Optional Variant. A String or byte array that specifies additional information for HTTP to use to resolve the hyperlink. For example, you can use ExtraInfo to specify the coordinates of an image map, the contents of a form, or a FAT file name.

Method  Optional Variant. Specifies the way ExtraInfo is attached.  Can be one of the following MsoExtraInfoMethod constants.

MsoExtraInfoMethod type can be one of these MsoExtraInfoMethod constants.
msoMethodGet. ExtraInfo is a String that’s appended to the address.
msoMethodPost. ExtraInfo is posted as a String or byte array.


HeaderInfo  Optional Variant. A String that specifies header information for the HTTP request. The defaut value is an empty string.

Example
This example loads the document at example.microsoft.com in a new window and adds it to the History folder.

ActiveWorkbook.FollowHyperlink Address:="http://example.microsoft.com", NewWindow:=True

Автор: slang 20.7.2005, 13:48
Чего-то не срастается, пишет ошибку:
Run-time error '-2146697208 (800c0008)
Automation error
при исполнении кода:
Код

Private Sub Worksheet_Activate()
    ActiveWorkbook.FollowHyperlink Address:="http://avtograd55.ru", NewWindow:=True
End Sub


Помогите сооброзить по поводу таймера...

Автор: likhobory 20.7.2005, 16:05
Цитата(slang @ 20.7.2005, 14:48)
Помогите сооброзить по поводу таймера...

собственно, справочный пример
Код

Application.OnTime Now + TimeValue("00:10:00"), "my_Procedure"

кинь код в процедуру my_Procedure для отработки процедуры каждые 10 мин.

Автор: likhobory 20.7.2005, 17:01
+ еще вариант: создать объект браузера и поиграться напрямую с его свойствами, методами ....
Код

Set ie = CreateObject("InternetExplorer.Application")
ie.Navigate "c:\readme.html"
ie.Visible = True
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ie.Refresh

Автор: slang 21.7.2005, 04:31
Последний вариант меня устроил больше всех! Спасибо. Но по нему есть вопрос: Когда эта процедура выполняется несколько раз, то получается запущено несколько браузеров, например за с утки откроется 144 раза. Каким образом это окно потом закрыть. Т.е. как его сделать не видимым - это понятно:
ie.Visible = True/False
Но реально-то окно будет запущено, соответственно для него будет выделена память и т.д., как от него можно избавится, например перед открытием следующего?

Автор: likhobory 21.7.2005, 10:24
Цитата(slang @ 21.7.2005, 05:31)
Когда эта процедура выполняется несколько раз, то получается запущено несколько браузеров

естественно, поскольку каждый раз отрабатывает CreateObject
это ж только пример, раскидай код по процедурам
Цитата
Затем необходимо дождатся открытия этой страницы

для большего удобства можно
1. создать отдельный класс, в котором объявить объектную переменную типа InternetExplorer и прописать обработчики соотв. событий (не забудь подцепить библиотеку типов shdocvw.dll)
2. в модуле создать объект этого класса и кинуть соотв. ссылку
тогда можешь цеплять событие окончания загрузки страницы, например:

создаем класс iie
Код

Public WithEvents ie As InternetExplorer

Private Sub ie_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
''''''''''''''''''''
End Sub

Private Sub ie_DownloadBegin()
''''''''''''''''''''''''''''
End Sub

Private Sub ie_DownloadComplete()
'''''''''''''''''''''''''''''''''''
End Sub


в обычном модуле
Код

Public MyIE As New iie

Public Sub RunEvents()

 Set MyIE.ie = New InternetExplorer

 With MyIE.ie
  .Visible = True
  .Navigate "c:\readme.html"
''''''''''''''''''''''''''''''''''''''''''''''''
 End With

 End Sub

в отдельной процедуре обновляешь страницу ( .Refresh) через указанный временной интервал

Автор: slang 21.7.2005, 16:07
Честно говоря стыдно спрашивать, но не смог я этого сделать, как подцепить библиотеку?

Автор: likhobory 25.7.2005, 15:28
VBE->Tools->References...

Автор: slang 26.7.2005, 05:25
Спасибо!!!
Добавлено @ 05:30
Кстати,
само периодическое действие (см. тему) можно сделать:
Код

Sub TT()
Application.OnTime Now + TimeValue("00:01:00"), "TT"
''''''''''''''''''''''''''''''''''''''''''''''''''''
  msgBox (Time())
End Sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)