С VBA получить Internet Explorer, чтобы выбрать элемент из списка - PullRequest
0 голосов
/ 10 октября 2018

Добрый день,

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

Я получил следующий код HTMLдо таблицы, из которой я хочу выбрать второй вариант «Неделя Ворига»

<table cellspacing="0" cellpadding="0" title=""  class="mstrListBlock" 
id="id_mstr51" style="display: table; width: auto;">
<tbody>
<tr>
<td class="mstrListBlockCell">
<span class="">
<div class="mstrListBlockCaption" style="display: none;"/>
<div class="mstrListBlockHeader" style="display: none;">
<div style="" class="mstrListBlockContents" 
id="ListBlockContents_id_mstr51">
<div oncontextmenu="return 
mstr.behaviors.Generic.oncontextmenu(arguments[0], self, 'id_mstr51');" 
onmouseup="try{mstr.$obj('id_mstr51').focus();}catch(localerr){}; return 
mstr.behaviors.Generic.clearBrowserHighlights(self)" onmousedown="var retVal 
= mstr.behaviors.ListView.onmousedown(arguments[0], self, 'id_mstr51'); 
try{mstr.$obj('id_mstr51').focus();}catch(localerr){}; return retVal" 
ondblclick="return mstr.behaviors.ListView.ondblclick(arguments[0], self, 
'id_mstr51')" class="mstrListBlockListContainer" id="id_mstr51ListContainer" 
style="display: block;">
<div class="mstrListBlockItem" title="Huidige Week">
<div class="mstrListBlockItemSelected" title="Vorige Week">
<div class="mstrBGIcon_fi mstrListBlockItemName" style="background-position: 
2px 50%; padding-left: 23px;">Vorige Week</div>
</div>
<div class="mstrListBlockItem" title="Afgesloten 4 Weken">
<div class="mstrListBlockItem" title="Afgesloten 8 Weken">
<div class="mstrListBlockItem" title="Huidige Periode">
<div class="mstrListBlockItem" title="Vorige Periode">
<div class="mstrListBlockItem" title="Afgesloten 2 Perioden">
<div class="mstrListBlockItem" title="Selectie Datum Hiërarchie. Aangepast 
wegens IServer crash icm. Metric prompts.">
<div class="mstrListBlockItem" title="Gisteren">

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

Sub JDWReport()

Dim objIE As InternetExplorer

Set objIE = New InternetExplorerMedium
objIE.Visible = True

objIE.navigate "URL"

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

objIE.document.getElementById("Uid").Value = "username"
objIE.document.getElementById("Pwd").Value = "password"
objIE.document.getElementById("3054").Click

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
objIE.navigate "URL2"

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
objIE.document.getElementsClassName("mstrBGIcon_fi 
mstrListBlockItemName")(0).Click

objIE.Quit
End Sub

См. Код выше, который я сейчас использую.Он застревает в строке objIE.document.getElementsClassName ("mstrBGIcon_fi mstrListBlockItemName") (0). Нажмите. Я попытался изменить эту строку на другие элементы, основанные на коде HTML, и использую .click .selectedindex = 2, но они не будут работать.

<div class="mstrListBlockItemSelected" title="Vorige Week">

В настоящее время он говорит, что mstrListBlockItemSelected, однако при первой навигации по сайту класс определяется как остальные, mstrListBlockItem.

Он будет изменен на выбранный, только если вы нажмете нарассматриваемый предмет (из списка предметов).Моя конечная цель состояла бы в том, чтобы заставить класс с заголовком "Неделя вихря" измениться с mstrListBlockItem на mstrListBlockItemSelected.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вы можете попробовать CSS-селектор атрибут = значение:

ie.document.querySelector("[title='Vorige Week']").Selected = True

Или

ie.document.querySelector("[title='Vorige Week']").Click
0 голосов
/ 11 октября 2018

Я вижу, что вы используете таблицу HTML и создаете в ней DIV.

Я пытаюсь найти и обнаружить, что для выделения текста в DIV нет никакого метода или свойства.

Я предлагаю вам использовать любой элемент управления HTML, чтобы выбрать его значение.Например, «Выбрать опцию».

Вы можете попытаться создать раскрывающийся список, используя select, а затем использовать приведенный ниже код для выбора любого значения в нем.

Sub Select_Item()
    Dim post As Object, elem As Object

    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "C:\Users\WCS\Desktop\element.html"  
       
       While .Busy = True Or .ReadyState < 4: DoEvents: Wend

        Set post = .Document.getElementById("ctl00_ContentPlaceHolder1_ddlCycleID")
       
       For Each elem In post.getElementsByTagName("option")
            If InStr(elem.Value, "10") > 0 Then elem.Selected = True: Exit For
        Next elem
    End With

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