Нужна помощь в изменении макроса для использования одного окна Internet Explorer - PullRequest
0 голосов
/ 23 мая 2018

Приведенная ниже функция открывает Oanda.com и принимает курс обмена валюты между долларом США и вводом (другая валюта).Уравнение будет заполнено другим макросом, чтобы охватить 48 строк.Макрос, как он есть, откроет 48 Internet Explorer Windows и закроет их после извлечения точки данных (1 за раз, когда уравнение обновляется вниз по столбцу).Этот процесс утомителен, и приведенный ниже метод кажется более эффективным на всех фронтах, но я не могу понять, как его реализовать:

Есть ли способ изменить это, чтобы сначала проверить существующее окно Internet Explorer, если онооткройте, просто используйте это окно, чтобы перейти в домен (который здесь переменный) и извлечь данные.Если окно не открыто, откройте его.Я не знаю процедур для поиска программ, работающих в фоновом режиме.

Основная цель - ускорить уравнение при его выполнении путем заполнения.Любые предложения приветствуются.

Ясность Редактировать: я создал UDF, чтобы помочь мне построить таблицу.Тикеры валют (USD, EUR, GBP и т. Д.) Будут охватывать столбец A до строки 48. В столбце B должен отображаться соответствующий курс обмена, соответствующий 1 доллару США (до строки 48).UDF ниже делает как задумано, но я ищу альтернативный, более эффективный способ сделать это.

Параметр Явный

Public Function ConvertUSD(ConvertWhat As String) As Double

    'References
    '   Microsoft XML, vs.0
    '   Microsoft Internet Controls
    '   Microsoft HTML Object Library.

    Dim IE As New InternetExplorer
    'IE.Visible = True

    IE.Navigate "https://www.oanda.com/currency/converter?quote_currency=USD&base_currency=" & ConvertWhat

    Do
        DoEvents
    Loop Until IE.ReadyState = ReadyState_Complete
    Dim Doc As HTMLDocument
    Set Doc = IE.Document
    Dim Ans As String
    Ans = Trim(Doc.getElementsByTagName("tbody")(2).innerText)
    Dim AnsExtract As Variant
    AnsExtract = Split(Ans, " ")

    ConvertUSD = AnsExtract(4)

    IE.Quit

End Function

1 Ответ

0 голосов
/ 24 мая 2018

Попробуйте:

Sub MainSub()
    Dim IE As InternetExplorer
    Set IE = New InternetExplorer
    '
    Dim x As Long
    Dim Currencies As Variant
    Currencies = Array("GBP", "EUR", "JPY", "HKD")
    '
    For x = LBound(Currencies) To UBound(Currencies)
        Debug.Print "1 USD = " & ConvertUSD(Currencies(x), IE) & " " & Currencies(x)
    Next x
    IE.Quit ' Quit here instead
    Set IE = Nothing
End Sub

Public Function ConvertUSD(ByVal ConvertWhat As String, IE As InternetExplorer) As Double

    'References
    '   Microsoft XML, vs.0
    '   Microsoft Internet Controls
    '   Microsoft HTML Object Library.

    ' Dim IE As New InternetExplorer ' Commented out here

    IE.Navigate "https://www.oanda.com/currency/converter?quote_currency=USD&base_currency=" & ConvertWhat

    Do
        DoEvents
    Loop Until IE.ReadyState = ReadyState_Complete
    Dim Doc As HTMLDocument
    Set Doc = IE.Document
    Dim Ans As String
    Ans = Trim(Doc.getElementsByTagName("tbody")(2).innerText)
    Dim AnsExtract As Variant
    AnsExtract = Split(Ans, " ")

    ConvertUSD = AnsExtract(4)

    ' IE.Quit ' Don't quit here

End Function

Ваша проблема в том, что вы продолжаете открывать новый IE каждый раз, когда вызывается функция.Однако, если вы откроете его перед вызовом функции, вы сможете повторно использовать его по мере необходимости - и выйти только после того, как закончите.

...