Excel VBA Кодирование для удаления данных, я застрял - PullRequest
0 голосов
/ 24 января 2019

Прежде всего, я хотел бы поблагодарить это сообщество за удивительный сайт. Я совершенно новичок в мире программирования и Excel VBA. Узнав о возможностях в excel, я начал свой путь по автоматизации ежедневного ввода данных, который мы делаем здесь, в нашем бизнесе. За последние несколько недель я смог собрать вместе несколько кодов, которые могут получить доступ к защищенному веб-сайту и создать нужный мне отчет на основе введенной даты Однако теперь я застрял в том, как на самом деле вытащить значения таблицы в Excel. Я приложил несколько фотографий. Прямо сейчас третий и четвертый

1 Ответ

0 голосов
/ 24 января 2019

Я бы подошел к нему с функцией, которая принимает на вход два параметра:

  • Экземпляр 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 и т. д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...