我正在 Excel (VBA) 中开发一个宏,以将信息从 Excel 电子表格加载到 Internet Explorer(网址:https ://www.tarifasdepedagios.com.br/tarifas/initial ),然后单击计算按钮,然后,从 IE 获取结果到 Excel 电子表格。
如何将结果数据从 Internet Explorer 传输到 Excel?
例子:
输入数据:
- 产地:圣保罗,SP,巴西
- 目的地:巴西里约热内卢,RJ
结果:
- 距离:435,06 公里(HTML 代码中的 ID:“mat-input-3”)
- 收费:59,70 雷亚尔(HTML 代码上的 ID:“mat-input-5”)
是否可以通过getElementsbyID
VBA 获得这些结果?
错误与 HTML 代码中的“ng-content”有关?
链接 HTML 代码:https ://i.stack.imgur.com/AwoEW.png
VBA代码如下:
Sub Pesquisa_Informações_Rota_TarifasdePedagios()
Dim IE As InternetExplorer, CidadeOrig As String, sng As Date
Dim LR As Long, Contador As Long, CidadeDest As String
Dim RS_litro As String
Dim km_litro As String
Dim Percentual As Single
'Limpa os resultados da última pesquisa realizada
Sheets("tarifasdepedagios.com.br").Select
Range("C5:F5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Range("A1").Select
'Identifica a última célula ativa da lista
Sheets("tarifasdepedagios.com.br").Select
LR = Cells(Rows.Count, 1).End(xlUp).Row
'Cria um objeto Internet Explorer
Set IE = New InternetExplorer
'Torna o objeto visível
IE.Visible = True 'True ou False
'Faz um loop por todas as linhas da planilha
For Contador = 5 To LR
'Navega ao site do Tarifas de Pedagios
IE.Navigate "https://www.tarifasdepedagios.com.br/tarifas/inicial"
'Identifica se a página já foi totalmente carregada
While IE.readyState <> READYSTATE_COMPLETE
Wend
sng = Timer
Do While sng + 3 > Timer
Loop
'Carrega os dados de cidade de origem e destino que serão preenchidos na página
RS_litro = Range("B1").Value
km_litro = Range("B2").Value
CidadeOrig = Range("A" & Contador).Value
CidadeDest = Range("B" & Contador).Value
'Carrega os dados de cidade de origem e destino na página e submente os dados do formulário
IE.document.all.Item("mat-input-9").Click
IE.document.all("mat-input-9").Value = CidadeOrig
IE.document.all.Item("mat-input-10").Click
IE.document.all("mat-input-10").Value = CidadeDest
IE.document.all("mat-input-0").Value = RS_litro
IE.document.all("mat-input-1").Value = km_litro
IE.document.all.Item("botaoRoteirizar").Click
'Identifica se a página já foi totalmente carregada
While IE.readyState <> READYSTATE_COMPLETE
Wend
sng = Timer
Do While sng + 3 > Timer
Loop
'Retorna os valores de distância, tempo, pedágio e combustível nas colunas 'C', 'D', 'E' e 'F'
Cells(Contador, 3) = IE.document.getElementsById("mat-input-3")(0).Value <- ERROR HERE (Run-time error '438' Object doesn't support this property or method)
Cells(Contador, 4) = IE.document.getElementsById("mat-input-4")(0).Value
Cells(Contador, 5) = IE.document.getElementsById("mat-input-6")(0).Value
Cells(Contador, 6) = IE.document.getElementsById("mat-input-5")(0).Value
Percentual = (Contador - 4) / (LR - 4)
AtualizaBarra Percentual
Next Contador
IE.Quit
frmProcesso.Hide
MsgBox "Olá, " & Application.UserName & "!" + vbCrLf + "Pesquisa finalizada!"
End Sub