VBA与网页上的单选button进行交互

编辑:几个月后,我再次尝试使用我第一次尝试相同的语法(下面张贴)。 出于某种原因,它的工作! 也许除了我的语法之外的东西导致无效… END EDIT

我一直在寻找论坛几个小时,现在试图find解决这个问题,但我没有尝试的东西工作。

我正在使用VBA来自动化在SurveyMonkey上创build调查的过程。 到目前为止,我已经能够:

  • login到我的帐户,
  • 点击几个超链接来创build一个新的响应收集器,
  • 命名收集器,
  • 转到collections夹设置,
  • 然后,select四个单选button中的三个来更改收集器设置。

问题不在于我无法select单选button; 我的代码select前三个button就好了。 令我感到困惑的是第四个button不会改变! 我对每个button使用相同的过程,所以我不知道为什么最后一个button不会select。

这是我的代码部分:

objIE.Document.getElementById("rdlResponseType_1").Click 'Allow multiple responses = Yes objIE.Document.getElementById("rdlResponseEdit_1").Click 'Allow Responses to be Edited = Yes objIE.Document.getElementById("rdlThankyou_1").Click 'Display a "Thank You" page? = Yes objIE.Document.getElementById("rdlCompleteOpt_1").Click 'Survey Completion = Close Window 

这是单选button的HTML:

 <table border="0" cellpadding="0" cellspacing="0" style="width: 100%;"> <tr id="CompleteOptDesc"> <td style="">&nbsp;</td> <td>After the respondent leaves the survey:</td> </tr> <tr id="CompleteOptItems"> <td style="">&nbsp;</td> <td align="left" nowrap="nowrap" valign="top"> <table id="rdlCompleteOpt" class="Clean radioList" OnClick="radioToggle('rdlCompleteOpt', '0', 'panLink');" name="rdlCompleteOpt" border="0" style="white-space: nowrap"> <tr> <td><span style="white-space: nowrap"><input id="rdlCompleteOpt_0" type="radio" name="rdlCompleteOpt" value="0" checked="checked" /><label for="rdlCompleteOpt_0"><b>Redirect</b> to your own webpage.</label></span></td> </tr><tr> <td><input id="rdlCompleteOpt_1" type="radio" name="rdlCompleteOpt" value="2" /><label for="rdlCompleteOpt_1"><b>Close Window</b></label></td> </tr> </table> 

下面是收音机切换部分的代码:

 <td width="65%" valign="top"> <div id="panLink" style="DISPLAY:inline"> <div class="URLinfo"> <b>Enter a URL</b> to jump to upon leaving the survey:<br /> <div title="REQUIRED: Enter URL (255 character max)" style="padding:4px 0 2px 0;"> <input name="txtWebLink" type="text" value="http://www.surveymonkey.com/" maxlength="255" size="40" id="txtWebLink" class="RQR opaque" /> </div> <span class="tip">Example: <u>http://www.mysite.com/home.html</u></span> </div> </div> </td> 

任何build议将非常感激!

有几件事情需要考虑:

  1. 你什么时候调用这个代码? OnNavigate或DocumentComplete? 这可能是该对象还不存在。 您可以通过使用断点并为expression式添加监视来检查它是否执行

     objIE.Document.getElementById("rdlCompleteOpt_1") 

    使用OnDocumentComplete来确保HTML组件存在

  2. 有可能你调用click函数的方式会导致一个问题。 尝试这个

     Call objIE.Document.getElementById("rdlCompleteOpt_1").Click() 

    我怀疑它可能会有很大的影响,但我想validation一切。

  3. 通过删除“图层”来隔离问题的原因。 你可以使用从IE开发工具(F12)JavaScript控制台调用的纯JavaScript来完成这个任务吗?

    如果没有,那么问题在于如何与页面元素进行交互。 如果是的话,那么我们需要弄清楚VBA保险是什么造成了问题。 再次看到#2,因为这可能是问题的原因。

    另外,如果您更改元素的HTML顺序,是否会发生问题? 如果你这样称呼呢?

     objIE.Document.getElementById("rdlCompleteOpt_1").Click 'Survey Completion = Close Window objIE.Document.getElementById("rdlResponseType_1").Click 'Allow multiple responses = Yes objIE.Document.getElementById("rdlResponseEdit_1").Click 'Allow Responses to be Edited = Yes objIE.Document.getElementById("rdlThankyou_1").Click 'Display a "Thank You" page? = Yes 

    它是否工作,或者“最后”项目失败?

  4. 非常不可能是原因,但HTML耗材缺lessclosures单元格,行和表格的代码。

      </tr> </table> <!-- missing --> </td> </tr> </table> 
  5. 虽然不是您的问题的具体答案,我相信这可能与您的post的意图内联。 由于您想pipe理一个surveymonkey收集器,请查看这里的SurveyMonkey API,因为使用API​​会带来很多好处。

    • 您不必依靠可能会更改的用户元素,或者在您的控制之外进行更改
    • 你可以使用一个受控和“契约”的界面来pipe理信息,这些信息可以覆盖你以后的任何变化(假设他们不会弃用和停止支持API)