簡體   English   中英

需要幫助修改宏才能使用一個Internet Explorer窗口

[英]Need help amending macro to use one Internet Explorer Window

以下功能將打開Oanda.com,並獲取美元與輸入(另一種貨幣)之間的貨幣兌換率。 該公式將由另一個宏填充,以覆蓋48行。 按原樣,該宏將打開48個Internet Explorer窗口,並在提取數據點后關閉它們(每次在該列向下更新時,每次1個)。 這個過程很繁瑣,下面的方法似乎在各個方面都更有效,但是我不知道如何實現:

有沒有一種方法可以對此進行修改,以首先檢查現有的Internet Explorer窗口,如果已打開,則只需使用該窗口轉到域(此處是可變的)並提取數據即可。 如果沒有打開一個窗口,則打開一個窗口。 我不知道搜索在后台運行的程序的過程。

主要目標是在通過填充執行方程時加快方程的速度。 任何建議歡迎。

清晰度編輯:我創建了UDF來幫助我建立表格。 貨幣行情(USD,EUR,GBP等)將在A列下至第48行。B列需要顯示與1 USD匹配的相應轉換率(下至第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

嘗試這個:

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。 但是,如果在調用該函數之前打開一個,則可以根據需要重新使用它-僅在完成后退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM