Очистка веб-данных от платформы базы данных (VBA - HTML) - PullRequest
0 голосов
/ 22 января 2020

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

Что я хочу от кода?

Нажав на кнопку макроса в Excel:

  • Войдите на сайт [x]
  • Поиск по указанному номеру [x]
  • Вывести обратно в Excel состояние элемента []
  • Повторять с шага 2 до тех пор, пока в столбце A не появятся числа (которые l oop?) []

https://imgur.com/u4IhpW7

Как видно на скриншоте в Excel, под ячейкой A9 начинается список чисел. Под ячейкой B9 я хочу, чтобы мои данные были распечатаны для каждого из чисел слева.

Так что мне уже удалось войти в систему и найти первый номер.

Здесь у весь код:

Sub Login()

    Dim ie As New SHDocVw.InternetExplorer
    Dim HTMLDoc As MSHTML.HTMLDocument
    Dim HTMLInput As MSHTML.IHTMLElement

    ie.Visible = True

    ie.Navigate Sheet1.Range("B2").Text

    Do While ie.ReadyState <> READYSTATE_COMPLETE
    DoEvents
    Loop

    Set HTMLDoc = ie.Document

'Setting Username to a specific value
    Set HTMLInput = HTMLDoc.getElementById("ctl00_WebPartManager1_gwpLogin1_Login1_UserName")

    HTMLInput.Value = Sheet1.Range("B3")

'Setting Password to a specific value
    Set HTMLInput = HTMLDoc.getElementById("ctl00_WebPartManager1_gwpLogin1_Login1_Password")

    HTMLInput.Value = Sheet1.Range("B4")
'Click to login
    Set HTMLInput = HTMLDoc.getElementById("ctl00_WebPartManager1_gwpLogin1_Login1_LoginButton")

    HTMLInput.Click

    MsgBox "Login Succesfull" & vbCrLf & "Press Ok to check LIAB"

    While ie.Busy
        DoEvents
    Wend

    Set HTMLInput = HTMLDoc.getElementById("ctl00_SearchSection_ObjectSearch_txtEMail")
    HTMLInput.Value = Null

    Set HTMLInput = HTMLDoc.getElementById("ctl00_SearchSection_ObjectSearch_txtCustomerID")
    HTMLInput.Value = Sheet1.Range("A10")

    Set HTMLInput = HTMLDoc.getElementById("ctl00_SearchSection_ObjectSearch_SearchButton")
    HTMLInput.Click

    While ie.Busy
        DoEvents
    Wend
'On Error Resume Next
End Sub

Вторая часть может быть неправильной, но именно так мне удалось найти это число. Я должен выяснить, как l oop, пока в столбце A не появятся числа, начиная с A9.

Так выглядит сайт

https://imgur.com/4GJQ4oF

Итак, мне нужно напечатать в столбце B, начиная с B9, внутренний текст «Status». Также есть условие, которое должно быть выполнено, и если внутренний текст состояния «Удален», но внутренний текст «Имя» не пуст, то выведите «Ошибка» в столбце B.

Таким образом, соответствующая таблица имеет теги без идентификатора, поэтому я не знаю, как ими манипулировать. Еще одна вещь, которую стоит упомянуть, это то, что если поля не заполнены, внутренний текст отображается как:

;

Заранее благодарен за любую помощь и внимание, чтобы прочитать все это .

Привет,

Алессио

Обновление изменений:

'Declared the new variable
    Dim iC as Integer
'........All the login part here........'
    MsgBox "Login Succesfull" & vbCrLf & "Press Ok to check LIAB"

    While ie.Busy
        DoEvents
    Wend
For iC = 10 To 29
'Now able to loop through a specific amount of cells, still not dynamic, still no idea how to pull the data from the td tags

    Set HTMLInput = HTMLDoc.getElementById("ctl00_SearchSection_ObjectSearch_txtCustomerID")
    HTMLInput.Value = Sheet1.Range("A" & iC)

    Set HTMLInput = HTMLDoc.getElementById("ctl00_SearchSection_ObjectSearch_SearchButton")
    HTMLInput.Click

    While ie.Busy
        DoEvents
    Wend
   Next
'On Error Resume Next
End Sub'

1 Ответ

0 голосов
/ 23 января 2020

Так как вам просто нужна помощь с l oop, я просто выкладываю код внутри и вокруг l oop. Я не тестировал этот код, но, надеюсь, он будет работать

Dim iC As Long
Dim iLastRow As Long: iLastRow = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
Dim HTMLInput As MSHTML.IHTMLElement
Dim oSearchButton As MSHTML.IHTMLElement: Set oSearchButton = HTMLDoc.getElementById("ctl00_SearchSection_ObjectSearch_SearchButton")

' Loop through all avaiable customer IDs
For iC = 10 To iLastRow

    ' Set Customer ID
    Set HTMLInput = HTMLDoc.getElementById("ctl00_SearchSection_ObjectSearch_txtCustomerID")
    HTMLInput.Value = Sheet1.Range("A" & iC)

    ' Press Search button
    oSearchButton.Click

    ' Wait for browser to complete task
    While ie.Busy
        DoEvents
    Wend

    ' Capture Status in colmn B
    Set HTMLInput = HTMLDoc.getElementById("ctl00_SearchSection_ObjectSearch_txtCustomerID")    ' Change element ID to point to status element
    Sheet1.Range("B" & iC) = HTMLInput.Value

Next

Совет: Если идентификаторы элементов не меняются, вы можете просто объявить свои элементы (элемент идентификатора клиента и элемент статуса ) за пределами For l oop и просто используйте их в l oop, как я это делал с oSearchButton element

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