我正在编写一个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>
感谢。
答案 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