5

編集: 数か月後、最初に試したのと同じ構文を使用してこれを再試行しました (以下に投稿)。なぜか効きました!たぶん、私の構文以外の何かが効果のない原因でした... END EDIT

この問題の解決策を見つけようと数時間フォーラムを検索してきましたが、試したことはどれもうまくいきません。

VBA を使用して、SurveyMonkey でアンケートを作成するプロセスを自動化しています。これまでのところ、次のことができました。

  • アカウントにログインし、
  • いくつかのハイパーリンクをクリックして、新しい応答コレクターを作成します。
  • コレクターの名前、
  • コレクターの設定に移動し、
  • また、4 つのラジオ ボタンのうち 3 つを選択して、コレクターの設定を変更します。

問題は、ラジオ ボタンを選択できないことではありません。私のコードは最初の 3 つのボタンを問題なく選択します。私を困惑させているのは、4 番目のボタンが変わらないことです! 各ボタンに同じプロセスを使用しているため、最後のボタンが選択されない理由がわかりません。

これが私のコードのセクションです:

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>

どんな提案でも大歓迎です!

4

1 に答える 1

2

考慮すべき点がいくつかあります。

  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を参照してください。API を使用するとかなりのメリットが得られます。

    • コントロールの外で変更または変更される可能性のあるユーザー要素に依存する必要はありません
    • 制御された「契約済み」インターフェースを使用して、将来の変更をカバーする情報を管理できます (API のサポートが廃止されたり停止されたりしないことを前提としています)。
于 2013-09-01T17:51:50.640 に答える