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

问题描述:

编辑:几个月后,我再次尝试使用我第一次尝试过的语法(发布如下)。出于某种原因,它工作!也许我的语法以外的东西导致无效... END编辑VBA与网页上的单选按钮进行交互

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

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

  • 登录到我的帐户,
  • 点击超链接数来创建新的响应收藏家,
  • 名称集,
  • 转到收集器设置,
  • 然后,选择四个单选按钮中的三个来更改收集器设置。

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

这里是我的代码段:

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 

这是单选按钮的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> 

任何建议将不胜感激!

+0

而不是调用点击方法,你尝试检查属性设置为true? – 2013-03-22 21:09:58

+0

我试过这一行:'objIE.Document.all.item(“rdlCompleteOpt”)(1).Checked = True',但它不起作用。 – ARich 2013-03-22 21:14:41

+0

'objIE.document.getElementById(“rdlCompleteOpt_1”)。Checked = True' – 2013-03-22 21:47:40

有几件事情要考虑:

  1. 当你调用这个代码? OnNavigate或DocumentComplete?这可能是该对象尚不存在。您可以检查,看它是否确实使用断点并增加了手表的表达

    objIE.Document.getElementById("rdlCompleteOpt_1") 
    

    使用OnDocumentComplete,确保HTML组件存在

  2. 这是可能的您呼叫的点击功能的方法是造成问题。试试这个

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

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

  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耗材缺少关闭单元格,行和表格的代码。

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

    • 你不必依赖可能改变或在外面改变了你的控制的用户单元
    • 你可以使用一个控制,“简约”的界面来管理其涵盖了你今后的任何变化的信息(假设他们没有弃用,而停止支持API)
+0

+1谢谢您的建议!我从来没有使用API​​,但我听过很多关于它们的信息,并且想知道SurveyMonkey是否有。我一定会进一步研究。 – ARich 2014-01-06 18:56:23