[英]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.