簡體   English   中英

自動化報告:使用VBA從IE的下拉菜單中選擇

[英]Automating a Report: Selecting from a drop down in IE using VBA

我正在嘗試使用VBA自動生成我的報告。 我可以部分地進行日志記錄,但是當涉及到帶有下拉菜單的下一個網頁導航時,我似乎無法掌握它。 我嘗試了多種方法來填寫第一個下拉菜單,即報告類型,但找不到正確的代碼

所有注釋的“'”都是我嘗試過的所有代碼。 由於該網站是客戶網站,因此無法發布。

html“檢查要素”照片

Sub Get_RawFile()

 Dim IE As New InternetExplorer
 Dim HTMLDoc As HTMLDocument
 Dim addressInput As HTMLInputElement

 With IE
    .Visible = True
    .Navigate ("------------------------")

    While IE.Busy Or IE.readyState <> 4: DoEvents: Wend

    Set HTMLDoc = IE.document
    HTMLDoc.all.UserName.Value = Sheets("Data Dump").Range("A1").Value
    HTMLDoc.all.Password.Value = Sheets("Data Dump").Range("B1").Value
    HTMLDoc.getElementById("login-btn").Click

    While IE.Busy Or IE.readyState <> 4: DoEvents: Wend

    'HTMLDoc.getElementByName("ddlReportType")(0).Value = "1"

    'Set HTMLDoc = IE.document
    'Set evtChange = HTMLDoc.createEvent("HTMLEvents")
    'evtChange.initEvent "change", True, False
    'Set selectElement = HTMLDoc.getElementById("ddlReportType")
    'selectElement.Value = "1" 'Attendance
    'selectElement.dispatchEvent evtChange
    'Set htmlSelectElem = HTMLDoc.getElementsByTagName("ddlReportType")
    'htmlSelectElem.selectedIndex = 1

    'Set reporttype = IE.document.getElementById("ddlReportType")

    'For i = 1 To reporttype.Options.Length
     'If reporttype.Options(i).Text = "Attendance" Then
      'reporttype.selectedIndex = i
      'Exit For
    'End If
   'Next i

 End With

運行時錯誤“ 438”對象不支持此屬性或方法

此方法.getElementByName不存在。 它應該是.getElementsByName("Something") ,在這種情況下,該方法將返回其Name屬性為Something的元素的集合。

以下內容將訪問Name屬性為ddlReportType的元素集合的第一個元素,並將其值設置為1

HTMLDoc.getElementsByName("ddlReportType")(0).Value = "1"

話雖如此,您似乎不確定ddlReportType是什么。

如果它是元素的id ,則該元素應如下所示:

<tagName id="ddlReportType">Something</tagName>

在這種情況下,您應該使用.getElementByID()方法

如果它是元素的Name ,則該元素應如下所示:

<tagName Name="ddlReportType">Something</tagName>

在這種情況下,您應該使用.getElementsByName()方法,該方法返回元素的集合。

如果它是元素的Class ,則該元素應如下所示:

<tagName Class="ddlReportType">Something</tagName>

在這種情況下,您應該使用.getElementsByClassName()方法,該方法返回元素的集合。

最后,我可以肯定地告訴您它不是 Tag Name因此您絕對不應該使用.getElementsByTagName方法。

編輯

從編輯原始帖子后提供的圖像中可以明顯看出, ddlReportType<select></select>元素的id 所以你應該這樣:

Dim HTMLselect As HTMLSelectElement
Set HTMLselect = HTMLDoc.getElementById("ddlReportType")
HTMLselect.Value = "1"

使用的參考: Microsoft HTML Object Library (VBE>工具>參考> ...)

這就是選擇下拉選項之一的方法。 要進一步導航,您必須按我認為的某個按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM