【问题标题】:VBA Interacting With Radio Buttons On WebpageVBA 与网页上的单选按钮交互
【发布时间】:2013-03-22 21:06:01
【问题描述】:

编辑:几个月后,我再次尝试使用与第一次尝试相同的语法(发布在下面)。出于某种原因,它奏效了!也许我的语法以外的其他东西导致了无效......结束编辑

我已经在论坛上搜索了几个小时,试图找到解决这个问题的方法,但是我尝试过的方法都不起作用。

我正在使用 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>

任何建议将不胜感激!

【问题讨论】:

  • 而不是调用click方法,您是否尝试将checked属性设置为true?
  • 我试过这条线:objIE.Document.all.item("rdlCompleteOpt")(1).Checked = True 但它没有用。
  • objIE.document.getElementById("rdlCompleteOpt_1").Checked = True
  • 谢谢你的建议,蒂姆!我试过了,但是很可惜,它没有用。我没有收到任何错误(这很好),但单选按钮仍设置为默认值。
  • 定义了一个java脚本,由单选按钮点击触发:onclick="radioToggle('rdlCompleteOpt', '0', 'panLink');"。 radioToggle 函数有什么作用?这段代码对我有用: Dim inputElement As HTMLInputElement Set inputElement = Document.getElementById("rdlCompleteOpt_1") inputElement.Click

标签: html excel internet-explorer vba radio-button


【解决方案1】:

有几点需要考虑:

  1. 您何时调用此代码? OnNavigate 还是 DocumentComplete?可能该对象还不存在。您可以通过使用断点并为表达式添加监视来检查它是否存在

    objIE.Document.getElementById("rdlCompleteOpt_1")
    

    使用 OnDocumentComplete 确保 HTML 组件存在

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

    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)

【讨论】:

  • +1 感谢您的建议!我从未使用过 API,但我听说过很多关于它们的信息,并且想知道 SurveyMonkey 是否有。我肯定会进一步调查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
相关资源
最近更新 更多