Данные VBA скремблирования с нескольких веб-сайтов

Я пытаюсь использовать VBA для очистки товаров / цен на акции с нескольких страниц на investing.com и вставки их в таблицу Excel.

Следующий код – это то, что я работаю, чтобы сделать единую цену, в этом примере золото:

Sub Extractdatafromwebsite() Dim ie As New InternetExplorer Dim doc As HTMLDocument ie.Visible = False ie.navigate "http://uk.investing.com/commodities/gold" Do DoEvents Loop Until ie.READYSTATE = READYSTATE_COMPLETE Set doc = ie.document output = doc.GetElementById("last_last").innerText Range("A1").Value = output ie.Quit End Sub 

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

Я попытался разработать код, который у меня есть, который работает, следующий пример – это то, что я пытался показать цену золота и серебра, однако он показал только цену золота в ячейках A1 и A2:

 Sub Extractdatafromwebsite() Dim ie As New InternetExplorer Dim doc As HTMLDocument ie.Visible = False ie.navigate "http://uk.investing.com/commodities/gold" Do DoEvents Loop Until ie.READYSTATE = READYSTATE_COMPLETE Set doc = ie.document output = doc.GetElementById("last_last").innerText Range("A1").Value = output ie.Quit ie.navigate "http://uk.investing.com/commodities/silver" Set doc = ie.document output = doc.GetElementById("last_last").innerText Range("A2").Value = output ie.Quit End Sub 

Может кто-нибудь поможет мне разобраться, как заставить это работать на нескольких страницах? Я пробовал поиск, но не придумал ничего, что соответствует моим потребностям.

Также возможно получить что-то всплывающее высказывание что-то вроде «Ожидание ….», пока данные собираются?

благодаря

Я обнаружил, что использование READYSTATE не является надежным в том смысле, что документ не был полностью загружен иногда – или, по крайней мере, объектная модель не загрузилась.

Поэтому я обычно добавляю команду sleep и Doevents, прежде чем пытаться получить доступ к новому объекту doc

Это должно работать для вас (и, как говорит @Dave, вам не нужно использовать IE.Quit )

 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Extractdatafromwebsite() Dim ie As New InternetExplorer Dim doc As HTMLDocument ie.Visible = False ie.Navigate "http://uk.investing.com/commodities/gold" Do Sleep 500 DoEvents Loop Until ie.ReadyState = 4 ' READYSTATE_COMPLETE Sleep 500 Set doc = ie.Document output = doc.GetElementById("last_last").innerText Range("A1").Value = output ie.Navigate "http://uk.investing.com/commodities/silver" Do Sleep 500 DoEvents Loop Until ie.ReadyState = 4 ' READYSTATE_COMPLETE Sleep 500 Set doc = ie.Document output = doc.GetElementById("last_last").innerText Range("A2").Value = output ie.Quit Set ie = Nothing End Sub 
Давайте будем гением компьютера.