无法使用VBA

时间:2018-06-06 07:20:35

标签: vba radio-button

以下是我正在使用的代码:

Sub Websitedata()
    Dim ie As Object
    Dim myURL As String
    myURL = "FIRST PAGE"

    Set ie = New InternetExplorerMedium
    ie.Visible = True
    ie.navigate myURL

    Do While ie.readyState <> 4 And ie.Busy
        DoEvents
    Loop

    'Selects a type from a dropdown bar
    ie.document.forms("actionForm").elements("dropdownbar").Value = "311"
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox1").Value = ""
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox2").Value = ""
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox3").Value = ""
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox4").Value = ""
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox5").Value = ""
    'Pressed submit and goes to next page.
    ie.document.forms("actionForm").elements("_eventId_Search").Click
    'Needs to press a radiobutton.
    ie.document.getElementByName("declarationId").Click
End Sub

点击单选按钮时遇到问题。尝试检查,点击,重视一切。

以下是该页面的HTML:

<TABLE id=declarationList class="list sortable" cellSpacing=0 cellPadding=0 width="100%"><TBODY>
<TR class=header>
    <TH style="TEXT-ALIGN: center" align=center></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">Type<SPAN class=sortarrow sortdir="down">&nbsp;&nbsp;?</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">rts<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">tyi<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">trtjm<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">erch<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">dft<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
</TR>
<TR class=evenRow>
    <TD style="TEXT-ALIGN: center" align=center><INPUT onclick="updateButtons('Import','GF','79295876',false,'null',false,true,true,false,false,false)" type=radio value=79295876 name=declarationId> </TD>
    <TD>IM A </TD>
    <TD>4561548 </TD>
    <TD>29/03/2018 </TD>
    <TD>32856 </TD>
    <TD>0313 </TD>
    <TD>40 00 , 40 00 </TD>
</TR>
</TBODY></TABLE>

我需要它来选择下一页中出现的单选按钮。我是否必须在顶部更改某种数据?请告诉我。我很迷惑。

更新 - 此查询仍然没有答案。请帮忙

1 个答案:

答案 0 :(得分:1)

您可以尝试使用CSS选择器

ie.document.querySelector("input[type=""radio""]").Click

使用提供的HTML测试CSS选择器:

CSS query

有关CSS选择器的更多信息,请访问:CSS Selectors

备注:

如果页面正在刷新,由于之前的点击,那么在点击之后您可能需要引入等待:

Application.Wait Now + TimeSerial(0,0,3)
ie.document.querySelector("input[type=""radio""]").Click    

或,

While .Busy = True Or .readyState < 4: DoEvents: Wend  
ie.document.querySelector("input[type=""radio""]").Click    

上述组合或甚至是循环,超时,尝试设置单击元素:

Dim a As Object, exitTime As Date
exitTime = Now + TimeSerial(0, 0, 5)

Do
    DoEvents
    On Error Resume Next
    Set a = IE.document.querySelector("input[type=""radio""]")
    On Error GoTo 0
    If Now > exitTime Then Exit Do
Loop While a Is Nothing

a.Click

如果打开一个新窗口,则需要查找该窗口的句柄,或者计数最多的窗口(最近的)。有详细说明这个方法。

以下是循环输入标记以查找type属性radio的输入标记的示例。这取决于你是否有一个以上是否点击了正确的,但给你一个想法。

Option Explicit
Public Sub test()
    Dim n As HTMLDocument
    Set n = New HTMLDocument
    n.body.innerHTML = [A1]  '<== your sample of HTML place in a cell

    Dim aList As Object, item As Object
    Set aList = n.getElementsByTagName("input")
    For Each item In aList
        On Error Resume Next
        If InStr(item.getAttribute("type").innerText, "radio", 1) > 0 Then
            Debug.Print item.outerHTML
            item.Click
            Exit For
        End If
        On Error GoTo 0
    Next item
End Sub