3

我正在编写一个 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>

谢谢。

4

9 回答 9

6

doc.getElementById("xs_r_gender").selectedindex=1
似乎可以解决问题。(其中 1 代表男性)

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

谢谢。

于 2013-02-25T12:00:25.537 回答
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
于 2014-09-26T15:35:33.630 回答
1

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

doc.getElementById("xs_r_gender").value = "Male"
于 2013-02-22T01:10:47.597 回答
1

您可以尝试应用带有属性的标签的 CSS 选择器的querySelector方法:documentoptionvalue = 'male'

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

或者

doc.querySelector("option[value='male']").Selected = True
于 2018-06-24T11:55:39.047 回答
1

谢谢堆栈,为我工作!我操作 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

于 2018-04-30T16:02:34.483 回答
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
于 2014-05-16T22:21:47.933 回答
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(此处)提供的功能。基于相同的答案,如果您想通过它的 value 属性调用选项(而不是文本,您可以将行更改If xComboName.Options(x).Text = xComboValue ThenIf xComboName.Options(x).value = xComboValue Then)。

这应该涵盖所有基础。

于 2017-09-01T19:57:32.360 回答
0

试试这个代码:

doc.getElementById("xs_r_gender").value = "Male"
doc.getElementById("xs_r_gender").FireEvent("onchange")
于 2016-05-18T17:16:26.353 回答
-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
于 2015-04-10T13:01:14.577 回答