使用excel vba更改网站上下拉菜单的值

时间:2013-02-21 13:06:38

标签: excel vba internet-explorer web-scraping drop-down-menu

我正在编写一个Excel宏来填写网站上的表格。我已经编写了足够容易填充文本框的代码,并找到了选择单选框的代码,但是我在从下拉菜单中选择信息时遇到了问题。

  

示例'性别':

     

组合框有三个选项:

Select / Male / Female
     

我尝试了一些变体:

doc.getElementsByName("xs_r_gender").Item(0).Value="Male"
     

......但没有运气。

这是网络源代码:

<td> <select name="xs_r_gender" id="xs_r_gender">
<option value="" selected>Select</option>
<option value="male">Male</option>
<option value="female">Female</option> </select></td>

感谢。

9 个答案:

答案 0 :(得分:6)

doc.getElementById("xs_r_gender").selectedindex=1
似乎可以做到这一点。 (其中1代表男性)

虽然这意味着我需要进行大量的查找,以确定下拉列表中项目的值。 (容易性别,只有两个选项,但我有一些组合框,最多50个选项)。如果有人知道更快的解决方案,那就太好了。在此期间,我开始做一些桌子!!!

感谢。

答案 1 :(得分:1)

尝试下面的代码,假设doc = ie.document

doc.getElementById("xs_r_gender").value = "Male"

答案 2 :(得分:1)

在代码中使用它来调用下面的函数。

xOffset = SetSelect(IE.Document.all.Item("shipToStateValue"), "Texas")
doc.getElementById("shipToStateValue").selectedindex = xOffset

然后将此用于您的功能

Function SetSelect(xComboName, xComboValue) As Integer
    'Finds an option in a combobox and selects it.

    Dim x As Integer

    For x = 0 To xComboName.options.Length - 1
        If xComboName.options(x).Text = xComboValue Then
            xComboName.selectedindex = x
            Exit For
        End If
    Next x

    SetSelect = x

End Function

答案 3 :(得分:1)

谢谢Stack,适合我!我操作IE HTML组合框下拉的解决方案原来分为两部分。

第1部分是点击下拉,这是代码:

Dim eUOM1 As MSHTML.HTMLHtmlElement
Set eUOM1 = ie.document.getElementsByTagName("input")(27).NextSibling
eUOM1.Focus
eUOM1.Click

第2部分是选择并单击该值,如下所示(*实际元素名称已更改):

Dim eUOM2 As MSHTML.HTMLHtmlElement
Set eUOM2 = ie.document.getElementsByName("[*PutNameHere]")(0)
eUOM2.Value = "EA"
eUOM2.Click

以下是参考:refs

答案 4 :(得分:1)

您可以尝试使用document的{​​{3}}方法将option标签的CSS选择器应用于属性value = 'male'

doc.querySelector("option[value='male']").Click

doc.querySelector("option[value='male']").Selected = True

答案 5 :(得分:0)

Function SetSelect(s, val) As Boolean

'Selects an item (val) from a combobox (s)
'Usage:
'If Not SetSelect(IE.Document.all.Item("tspan"), "Custom") Then
'something went wrong
'Else
'continue...
'End If

Dim x As Integer
Dim r As Boolean
r = False
For x = 0 To s.Options.Length - 1
If s.Options(x).Text = val Then
s.selectedIndex = x
r = True
Exit For
End If
Next x

SetSelect = r
End Function

答案 6 :(得分:0)

试试这段代码:

doc.getElementById("xs_r_gender").value = "Male"
doc.getElementById("xs_r_gender").FireEvent("onchange")

答案 7 :(得分:0)

您可以这样做:

doc.getElementsByName("xs_r_gender").Item(1).Selected=True

doc.getElementById("xs_r_gender").selectedindex = 1

其中1是男性选择(在两种情况下)。

如果Dropbox需要触发某些事件以便知道您的选择,那很可能是“onchange”事件。你可以这样开火:

doc.getElementById("xs_r_gender").FireEvent("onchange")

如果您希望能够根据选项的文本选择选项,则可以使用Lansman(here)给出的功能。 基于相同的答案,如果您想通过它的value属性调用该选项(而不是文本,则只需将行If xComboName.Options(x).Text = xComboValue Then更改为If xComboName.Options(x).value = xComboValue Then)。

这应涵盖所有基础。

答案 8 :(得分:-1)

从这里复制到最后一行:

Sub Filldata()

Set objShell = CreateObject("Shell.Application")

IE_count = objShell.Windows.Count

For X = 0 To (IE_count - 1)

On Error Resume Next    ' sometimes more web pages are counted than are open

my_url = objShell.Windows(X).document.Location

my_title = objShell.Windows(X).document.Title

   If my_title Like "***Write your page name***" Then

    Set IE = objShell.Windows(X)

        Exit For

    Else

        End If

    Next

With IE.document.forms("***write your form name***")

' Assuming you r picking values from MS Excel Sheet1 cell A2

i=sheet1.range("A2").value 

.all("xs_r_gender").Item(i).Selected = True

End with

End sub