2014-09-18 7 views
0

Я пытаюсь создать макрос, где он будет извлекать данные из определенного атрибута, и просто вставить на excel, я попробовал его с помощью getElementsById, но он не работает для меня.VBA для извлечения значений атрибутов из HTML

У меня есть ссылка:
https://secure.bmw.com/_common/silo/pages/form-tabs/controller_opt.jsp?locale=XQ_en&usercountry=IN&tracking_usercountry=IN&tracking_locale=XQ_en&transfer=f23_info_req_lp

Просто просмотра исходных текстов, и вы увидите имя атрибута "свинцовый контекст"

<input type="hidden" name="reg_source" value="OPK"> 
<input type="hidden" name="lead_context" value="F45CV ROI OPK"> 
<input type="hidden" name="subscription_lead_context" value="F45CV ROI OPK"> 
<input type="hidden" name="cam_source_code" value="1-1521452141"> 
<input type="hidden" name="offer_code" value="1524521452"> 

Поэтому в основном я хочу значение "OPK", «F45CV ROI OPK »,« 1-1521452141 »и« 1524521452 »на листе пресса.

Может ли кто-нибудь помочь мне с простым кодом, Извините, поскольку я новичок в VBA.

Спасибо за ваше время :)

С уважением, Mayur

+0

'GetElementById()' не будет работать на то, что не имеет идентификатор и те ''

элементы имеют только имена. Есть ли причина, по которой вы отправляете исходный код сайта, а не собственный код? – Jeeped

ответ

0

Один метод захватить все <input> элементы и цикл через них, чтобы собрать то, что вам нужно. Назначение переменной, которое я использовал, требует Инструменты, Ссылки, Microsoft HTML Object Library, но вы можете просто назвать их объектами, если хотите.

Dim eNPT As MSHTML.IHTMLElement, ecNPTs As MSHTML.IHTMLElementCollection 
Set ecNPTs = ie.document.getElementsByTagName("input") 
Range("A1:A5").ClearContents 
For Each eNPT In ecNPTs 
    Select Case LCase(eNPT.getAttribute("name")) 
     Case "reg_source" 
      Range("A1") = eNPT.Value 
     Case "lead_context" 
      Range("A2") = eNPT.Value 
     Case "subscription_lead_context" 
      Range("A3") = eNPT.Value 
     Case "cam_source_code" 
      Range("A4") = eNPT.Value 
     Case "offer_code" 
      Range("A5") = eNPT.Value 
     End Select 
     If Application.CountA(Range("A1:A5")) = 5 Then Exit For 
Next eNPT 
Set ecNPTs = Nothing: Set eNPT = Nothing 
Смежные вопросы