Preciso realizar uma macro para copiar cada um dos escritórios da XP no Brasil para uma planilha, porém estou com dúvida no começo do código.
Realizei duas subs, uma que abre o IE e outra que processa o código HTML. O site em questão (https://www.xpi.com.br/sobre-a-xp/encontre-um-escritorio/) conta com dois objetos de tag "select", um que se refere aos estados ("states") e outro que se refere à cidade ("cities").
Minha dúvida é como atualizar o objeto "cities" ao escolher um estado da lista. Meu código até aqui é esse, porém ao selecionar o estado as cidades possíveis não são atualizadas, e, com isso, a minha cidade sempre retorna "Selecione a cidade":
Sub EscritoriosXPIE()
'HABILITAR REFERÊNCIAS: Microsoft Internet Control, Microsoft HTML Object Library
Dim IE As SHDocVw.InternetExplorer, HTMLDoc As MSHTML.HTMLDocument, HTMLButton As MSHTML.IHTMLElementCollection
'definindo objeto IE
Set IE = New SHDocVw.InternetExplorer
'abrindo IE
With IE
.Visible = True
.navigate "https://www.xpi.com.br/sobre-a-xp/encontre-um-escritorio/"
'pausar a macro enquanto carrega o navegador
While .readyState <> READYSTATE_COMPLETE
Wend
End With
'abrindo o código HTML
Set HTMLDoc = IE.Document
Set HTMLButton = HTMLDoc.getElementsByTagName("button")
' 'printando número de botons
' Debug.Print HTMLButton.Length
'pesquisar escritórios XP
ProcessarHtmlPage HTMLDoc
End Sub
Sub ProcessarHtmlPage(HTMLPage As MSHTML.HTMLDocument)
'HABILITAR REFERÊNCIA: Microsoft HTML Object Library
Dim HTMLStates As MSHTML.IHTMLElement, HTMLCities As MSHTML.IHTMLElement
Dim HTMLOptionState As MSHTML.IHTMLElement, HTMLOptionCity As MSHTML.IHTMLElement
Dim HTMLButtons As MSHTML.IHTMLElementCollection
Dim cont_states As Long, cont_cities As Long, state As Long, city As Long
'limpando a plan de trabalho
Worksheets("Resumo").Select
Cells.Delete
'definindo objetos HTMLState, HTMLCity e HTMLButton
Set HTMLStates = HTMLPage.getElementById("states")
Set HTMLButtons = HTMLPage.getElementsByTagName("buttons")
'definindo número de estados
cont_states = HTMLStates.Length
'loop por todos os estados e cidades
For state = 0 To cont_states
Debug.Print HTMLStates.Item(state).innerText
HTMLStates.selectedIndex = state
Set HTMLCities = HTMLPage.getElementById("cities")
cont_cities = HTMLCities.Length
For city = 0 To cont_cities
On Error Resume Next
Debug.Print HTMLCities.Item(city).innerText
Next city
Next state
Pergunta
guirodrigues
Olá pessoal,
Preciso realizar uma macro para copiar cada um dos escritórios da XP no Brasil para uma planilha, porém estou com dúvida no começo do código.
Realizei duas subs, uma que abre o IE e outra que processa o código HTML. O site em questão (https://www.xpi.com.br/sobre-a-xp/encontre-um-escritorio/) conta com dois objetos de tag "select", um que se refere aos estados ("states") e outro que se refere à cidade ("cities").
Minha dúvida é como atualizar o objeto "cities" ao escolher um estado da lista. Meu código até aqui é esse, porém ao selecionar o estado as cidades possíveis não são atualizadas, e, com isso, a minha cidade sempre retorna "Selecione a cidade":
Sub EscritoriosXPIE()
'HABILITAR REFERÊNCIAS: Microsoft Internet Control, Microsoft HTML Object Library
Dim IE As SHDocVw.InternetExplorer, HTMLDoc As MSHTML.HTMLDocument, HTMLButton As MSHTML.IHTMLElementCollection
'definindo objeto IE
Set IE = New SHDocVw.InternetExplorer
'abrindo IE
With IE
.Visible = True
.navigate "https://www.xpi.com.br/sobre-a-xp/encontre-um-escritorio/"
'pausar a macro enquanto carrega o navegador
While .readyState <> READYSTATE_COMPLETE
Wend
End With
'abrindo o código HTML
Set HTMLDoc = IE.Document
Set HTMLButton = HTMLDoc.getElementsByTagName("button")
' 'printando número de botons
' Debug.Print HTMLButton.Length
'pesquisar escritórios XP
ProcessarHtmlPage HTMLDoc
End Sub
Sub ProcessarHtmlPage(HTMLPage As MSHTML.HTMLDocument)
'HABILITAR REFERÊNCIA: Microsoft HTML Object Library
Dim HTMLStates As MSHTML.IHTMLElement, HTMLCities As MSHTML.IHTMLElement
Dim HTMLOptionState As MSHTML.IHTMLElement, HTMLOptionCity As MSHTML.IHTMLElement
Dim HTMLButtons As MSHTML.IHTMLElementCollection
Dim cont_states As Long, cont_cities As Long, state As Long, city As Long
'limpando a plan de trabalho
Worksheets("Resumo").Select
Cells.Delete
'definindo objetos HTMLState, HTMLCity e HTMLButton
Set HTMLStates = HTMLPage.getElementById("states")
Set HTMLButtons = HTMLPage.getElementsByTagName("buttons")
'definindo número de estados
cont_states = HTMLStates.Length
'loop por todos os estados e cidades
For state = 0 To cont_states
Debug.Print HTMLStates.Item(state).innerText
HTMLStates.selectedIndex = state
Set HTMLCities = HTMLPage.getElementById("cities")
cont_cities = HTMLCities.Length
For city = 0 To cont_cities
On Error Resume Next
Debug.Print HTMLCities.Item(city).innerText
Next city
Next state
End Sub
Obrigado desde já pela ajuda!
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.