Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2013, 10:07   #1
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию Обновление данных в "InternetExplorer"

Вот невзаимосвязанные фрагменты кода из моего кода:
Код:
    Dim myIE As SHDocVw.InternetExplorer
    Set myIE = CreateObject(class:="InternetExplorer.Application")
    myIE.Visible = True
    myIE.Navigate URL:=myURL
    Set mySite = myIE.Document
    myButton.Click
В конце я нажал с помощью кода на кнопку, но в "myIE" данные остаются о том сайте, на котором "Internet Explorer" был до нажатия кнопки, хотя на мониторе отображается новый сайт.

Как сделать так, чтобы "myIE" был связан с новым сайтом?


Позже добавлено

Оказывается, после команды "myButton.Click" нужно подождать некоторое время, пока сайт отобразится на мониторе, а команда:
Код:
    Do While myIE.readyState <> READYSTATE_COMPLETE
        'Останавливаем работу процедуры на 1 секунду,
            'чтобы не тормозить работу всего компьютера,
            'т.к. циклы тормозят работу компьютера.
        Sleep dwMilliseconds_In:=1000
    Loop
не работает в этом случае.

Нужно теперь придумать, как определить, что страница загружена после нажатия кнопки.

Последний раз редактировалось Скрипт; 26.06.2013 в 11:42.
Скрипт вне форума Ответить с цитированием
Старый 26.06.2013, 12:35   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Если сайт не секрет,выложите ссылку.
Как вариант ,ждать в цикле до смены заголовка страницы.
Я такое практиковал
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 26.06.2013, 12:46   #3
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Сайт любой можно использовать, где есть элемент управления "поле" (html-тег "input"). В него вводим текст и нажимаем кнопку, после чего открывается новая страница. Я сейчас изучаю работу с "Internet Explorer" в VBA, а не конкретно пишу какую-то задачу.
Вот отсюда можно взять ссылку на сайт (в сообщении #1):
http://www.programmersforum.ru/showthread.php?t=239721
В этой теме есть задание и если его делать, то при вводе текста в поле поиска и нажатии кнопки (справа от поля в виде лупы), открывается другая страница. Вот у меня как раз на этом месте сейчас проблема - у меня переменная "myIE" брала данные с предыдущей страницы.


Да, у меня тоже возникла идея ждать, когда сменится содержимое сайта, я решил ждать, когда сменится адрес сайта в адресной строке. Сейчас пришла идея использовать события - у "Internet Explorer" есть события. Пока столкнулся с проблемой: при возникновении события замедляется работа кода. Буду смотреть, что делать дальше.

Последний раз редактировалось Скрипт; 26.06.2013 в 12:48.
Скрипт вне форума Ответить с цитированием
Старый 26.06.2013, 13:33   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Например так
Код:
Dim IE  As Object
Sub Start1()
    If IE Is Nothing Then
        Set IE = CreateObject("InternetExplorer.Application")
    End If
    IE.Visible = True
    IE.Navigate "http://ru.wikipedia.org/w/index.php?search=груша+9"
    While IE.Busy Or (IE.ReadyState <> 4): DoEvents: Wend

    For Each x In IE.Document.GetElementsByTagName("div")
        If InStr(1, x.classname, "mw-search-result-heading", vbTextCompare) > 0 Then
            For Each X1 In x.GetElementsByTagName("a")
                href = X1.href ' берем только первую ссылку
                GoTo Дальше
        Next
   End If
  Next
Exit Sub
Дальше:

   IE.Navigate href
  
    For i = 1 To 1000: DoEvents: Next
    While IE.Busy Or (IE.ReadyState <> 4): DoEvents: Wend
   ' Дальше ваш код
    
      IE.Quit
   Set IE = Nothing

End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 26.06.2013, 13:48   #5
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

doober, весь секрет был оказывается в "Busy" (не знаю, когда бы сам до этого догадался).

Вот так отслеживается после нажатия кнопки:
Код:
    'Ждём, когда сайт загрузится на компьютер и откроется.
    Do While myIE.Busy = True Or myIE.readyState <> READYSTATE_COMPLETE
        'Останавливаем работу процедуры на 1 секунду,
            'чтобы не тормозить работу всего компьютера,
            'т.к. циклы тормозят работу компьютера.
        Sleep dwMilliseconds_In:=1000
    Loop
Скрипт вне форума Ответить с цитированием
Старый 26.06.2013, 17:56   #6
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

я так делал

Код:
Set IE = CreateObject("InternetExplorer.Application")

Call IELoadPage(URL, IE)

...

Private Sub IELoadPage(ByVal Url As String, _
                       ByRef IE As Object)
    IE.Navigate Url

    Do While IE.Busy Or IE.readyState <> 4
        DoEvents
    Loop
End Sub
и чтобы не плодить подобных кострукций
Код:
For Each x In IE.Document.GetElementsByTagName("div")
        If InStr(1, x.classname, "mw-search-result-heading", vbTextCompare) > 0 Then
            For Each X1 In x.GetElementsByTagName("a")
                href = X1.href ' берем только первую ссылку
                GoTo Дальше
        Next
   End If
  Next
написал простой селектор, с кот. идет работа вида
Код:
Set List = QSA.Query("table.results-list tbody tr", Html)
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Как "повесить " передачу данных из формы на событие нажатия кнопки типа "button" ? vedro-compota JavaScript, Ajax 10 14.12.2010 21:05
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Обновление набора данных после добавления в таблицу записей "внешней" программой dimmm БД в Delphi 5 21.04.2009 00:56
Трехзвенная архитектура "клиент-сервер": обновление данных Lisi4ka Помощь студентам 1 07.04.2009 11:14