Попытка получить значения таблицы IE, в то время как первое значение возвращает нормально, второе - нет, и excel не дает мне ошибки - PullRequest
0 голосов
/ 03 августа 2020

Это с веб-сайта, посвященного производству систем солнечной энергии, я пытаюсь получить общую мощность каждого месяца для проекта, первый месяц «январь» возвращает общую мощность, а второй - нет. Вот часть моего кода. Я начал писать коды на vba менее чем за год go, я перепробовал все, что узнал до сих пор, но ничего не работает.

If Not VBA.IsNull(IE.document.getElementById("ctl00_childPanel_MM")) Then
'Day
Dim htmlSelect1
'Month
Dim htmlSelect2
'Year
Dim htmlSelect3

Set htmlSelect1 = IE.document.getElementById("ctl00_childPanel_DD")
Set htmlSelect2 = IE.document.getElementById("ctl00_childPanel_MM")
Set htmlSelect3 = IE.document.getElementById("ctl00_childPanel_YYYY")


    htmlSelect1.Value = TextBox1.Value
    htmlSelect2.Value = TextBox2.Value
    htmlSelect3.Value = TextBox3.Value
Else
    MsgBox "Element not found.", vbExclamation
End If

    While IE.ReadyState <> 4
        DoEvents
    Wend

'On click pop-up a table with the values
IE.document.getElementById("ctl00_childPanel_Button1").Click

Application.Wait Now + TimeSerial(0, 0, 10)

Set tbl = IE.document.getElementById("table-pre")

' Find value of January and assign the value to TextBox4
For Each td In tbl.getElementsByTagName("td")
    If td.innerText = "0.01" Then
        Me.TextBox4.Value = td.NextSibling.innerText
    End If
    Next
    
    
' Go to the next month
IE.navigate "javascript:hide()"
htmlSelect2.Value = f

'On click pop-up a table with the values
IE.document.getElementById("ctl00_childPanel_Button1").Click
    
Application.Wait Now + TimeSerial(0, 0, 10)

'HERE IS THE PROBLEM, EVEN WITH THE FEBRUARY TABLE OPENED
'IT DOES NOT FIND OR ASSIGN THE VALUE TO THE TEXTBOX5
With tbl
For Each td In tbl.getElementsByTagName("td")
    If td.innerText = "0.01" Then
        Me.TextBox5.Value = td.NextSibling.innerText
    End If
    Next
End With
End With
Set IE = Nothing

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

IE.document.getElementById("ctl00_childPanel_Button1").Click

Application.Wait Now + TimeSerial(0, 0, 10)

Set tbl = IE.document.getElementById("table-pre")

' Find value of January and assign the value to TextBox4
For Each td In tbl.getElementsByTagName("td")
    If td.innerText = "0.01" Then
        Me.TextBox4.Value = td.NextSibling.innerText
    End If
    Next
End With
    
'February
With IE
' Go to the next month
IE.navigate "javascript:hide()"
htmlSelect2.Value = february
IE.document.getElementById("ctl00_childPanel_Button1").Click
    
Application.Wait Now + TimeSerial(0, 0, 10)

Set tbl = IE.document.getElementById("table-pre")

For Each td In tbl.getElementsByTagName("td")
    If td.innerText = "0.01" Then
        Me.TextBox5.Value = td.NextSibling.innerText
    End If
    Next
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...