使用vba在网站上的“打开”框中选择“单选按钮/输入值”

问题描述 投票:2回答:2

我试图打出单选按钮问题,并希望在打开的文本框中输入值(使用VBA)。下面是我正在使用的脚本。

我尝试了很多东西,看了看其他网站,但它没有用。

如果有人可以指导我会很棒。

Dim IE As Object
Dim Region, VOCSentDate As String

Sheets("Sheet1").Select
Region = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value
VOCSentDate = ThisWorkbook.Worksheets("Sheet1").Range("B1").Value

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "website link....."
Application.StatusBar = "Submitting"
While IE.Busy
DoEvents
Wend

我不知道如何打出单选按钮问题。我在下面尝试了3种类型的Open文本框,但它们都没有工作,抛出了对象所需的错误

IE.Document.getElementById("ctl00_body_7F22FA6E-5D77-426A-AA84-68D833FA05C1_3").Value = VOCSentDate

IE.Document.getElementById("ctl00_body_7F22FA6E-5D77-426A-AA84-68D833FA05C1_3").innerText = VOCSentDate

IE.Document.all("ctl00_body_7F22FA6E-5D77-426A-AA84-68D833FA05C1_3").Value = VOCSentDate

Application.StatusBar = "Form Submitted"
IE.Quit
Set IE = Nothing

--------------单选按钮的HTML --------------

<div class="SurveyItem  RadioButtonList Item1">
  <div class="ItemText">
    <span class="NoItemNumber"></span><span class="QuestionText">Please select your region:</span>
  </div>
  <div class="Validators">
    <span id="ctl00_body_ctl12" style="color:Red;display:none;">A response to this question is required</span>
  </div>
  <div id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" class="Response">
    <div class="ResponseOption">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_1" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_1" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_1">Americas</label>
    </div>
    <div class="ResponseOption AlternatingRow">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_2" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_2" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_2">ANZ</label>
    </div>
    <div class="ResponseOption">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_3" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_3" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_3">APAC</label>
    </div>
    <div class="ResponseOption AlternatingRow">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_4" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_4" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_4">APME</label>
    </div>
    <div class="ResponseOption">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_5" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_5" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_5">Europe</label>
    </div>
    <div class="ResponseOption AlternatingRow">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_6" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_6" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_6">India</label>
    </div>
    <div class="ResponseOption">
      <input id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_7" type="radio" name="ctl00$body$ctl00_body_ctl00_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1" value="01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_7" /><label for="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_7">North America</label>
    </div>

------------------- Open End的HTML -------------------------

<div class="SurveyItem  Item3">
  <div class="ItemText">
    <span class="NoItemNumber"></span><span class="QuestionText">EOPR First Sent Date (dd/mm/yyyy)</span>
  </div>
  <div class="Validators">
    <span id="ctl00_body_ctl52" style="color:Red;display:none;">A response to this question is required</span><span id="ctl00_body_ctl53" style="color:Red;display:none;">Incorrect Date Format</span>
  </div>
  <div class="Response">
    <input name="ctl00$body$01EE9560-B1F9-4BA3-A922-9D53A1120FC2_3" type="text" id="ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_3" class="TextBox" />
  </div>
</div>
excel vba
2个回答
1
投票

tl;博士

以下是基于HTML的显示。如果涉及父级form/frame/iframe标签,则在进行下面的选择之前还需要进行协商。


单选按钮:

对于单选按钮,您可以使用CSS选择器组合来定位页面样式并返回所有单选按钮元素的nodeList。然后,您可以通过索引选择适当的按钮

Dim aNodeList As Object
Set aNodeList = ie.document.querySelectorAll(".ResponseOption [type=radio]")
aNodeList.item(0).Click '<==Select first  option

我认为click可能是方法,因为我看不到checked属性,否则语法将是aNodeList.item(0).checked = True

返回的nodeList如下索引


文本框:

输入框有一个ID,因此您可以使用ID选择器#来定位

ie.document.querySelector("#ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_3").Value = "myText"

0
投票

要选择单选按钮样式输入,请将checked属性设为true。

IE.Document.getElementById("ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_1_6").checked = true

输入文本框获取其值集。

IE.Document.getElementById("ctl00_body_01EE9560-B1F9-4BA3-A922-9D53A1120FC2_3").value = format(VOCSentDate, "d/m/yy")
© www.soinside.com 2019 - 2024. All rights reserved.