Я бы подошел к нему с функцией, которая принимает на вход два параметра:
- Экземпляр Internet Explorer
- Метка, которую вы хотите очистить (например,
NET SALES
)
... и возвращает String
желаемое значение.
К сожалению, я ничего не могу поделать, не имея настоящего HTML и не имея возможности протестировать, так что это моя слепая попытка (вдохновитесь, но не ожидайте, что вы скопируете / вставите, и код будет работать) :
Private Function getValueByLabel(ByVal ie As SHDocVw.InternetExplorer, ByVal label As String) As String
Dim listOfRows As Object: Set listOfRows = ie.document.getElementsByTagName("tr")
Dim cellsInsideARow As Object
For Each tRow In listOfRows
Set cellsInsideARow = tRow.getElementsByTagName("td")
If cellsInsideARow(2).getElementsByTagName("div")(1).innerText = label Then
getValueByLabel = cellsInsideARow(3).getElementsByTagName("div")(1).innerText
Exit Function
End If
Next tRow
getValueByLabel = "N/A"
End Function
В основном, функция выше:
- Получение списка
tr
(строк), загруженного в document.body
экземпляра InternetExplorer
, который вы прошли через
- Для каждого из них, проверяем, равен ли
.innerText
3-го td
(ячейки) элемент label
, который вы хотите очистить (в вашем случае NET SALES
)
- Если это так, возвращает функцию с
.innerText
4-го td
элемента
- Остальное, возвращает
N/A
Вы бы использовали функцию, просто вызвав ее с хорошими параметрами из вашего макроса, например:
Range("A1") = "NET SALES"
Range("B1") = getValueByLabel(IE, Range("A1").Value)
P.s. причина, по которой я сделал функцию, состоит в том, что вы можете повторно использовать один и тот же код для любого элемента, находящегося в той же таблице, просто передавая желаемую метку (NET SALES
вместо GROSS SALES
и т. д.)