Я покажу вам два метода:
Использование IE: данные находятся внутри фрейма, который необходимо согласовать
Использование запроса XMLHTTP- намного быстрее и без открытия браузера.Он использует первую часть URL-адреса документа iframe, по которой перемещается iframe.
В обоих случаях я получаю доступ к таблицам, содержащим название компании, а затем к таблице с информацией о раскрытии.Для раскрытия основной информационной таблицы я копирую externalHTML в буфер обмена и вставляю в Excel, чтобы избежать зацикливания всех строк и столбцов.Вместо этого вы можете просто установить цикл tr (строки таблицы) и td (ячейки таблицы).
IE:
Option Explicit
Public Sub GetInfo()
Dim IE As New InternetExplorer, clipboard As Object
With IE
.Visible = True
.navigate "http://www.bursamalaysia.com/market/listed-companies/company-announcements/5923061"
While .Busy Or .readyState < 4: DoEvents: Wend
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
With .document.getElementById("bm_ann_detail_iframe").contentDocument
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1) = .getElementsByClassName("company_name")(0).innerText
clipboard.SetText .getElementsByTagName("table")(1).outerHTML
clipboard.PutInClipboard
End With
ThisWorkbook.Worksheets("Sheet1").Cells(2, 1).PasteSpecial
.Quit
End With
End Sub
XMLHTTP:
Вы можете извлечь другой URL-адрес из внешнего интерфейса URL-адреса iframe и использовать его, как показано ниже.
Вот раздел исходного HTML, которыйпоказывает iframe и связанную с ним информацию нового URL:

Option Explicit
Public Sub GetTable()
Dim sResponse As String, html As HTMLDocument, clipboard As Object
Set html = New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "http://disclosure.bursamalaysia.com/FileAccess/viewHtml?e=2891609", False
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
sResponse = StrConv(.responseBody, vbUnicode)
End With
html.body.innerHTML = sResponse
With html
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1) = .querySelector(".company_name").innerText
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
clipboard.SetText .querySelector(".InputTable2").outerHTML
clipboard.PutInClipboard
End With
ThisWorkbook.Worksheets("Sheet1").Cells(2, 1).PasteSpecial
End Sub