2017-10-11 9 views
0

私の会社のオートメーションを作成しようとしたとき、私は困難を偶然見つけましたが、私はそれを上回ることはできません。私はこのサイトや他のサイトで多くの記事を読んだが、答えは見つからなかった。ドロップダウンリストを永久に変更する方法

基本的に私の会社が使用するインターネットアプリケーションをクリックすると、ドロップダウンリストが表示されます。ユーザーは10ポジションで値を "Read"から "All"に変更する必要があります。そして、アプリケーションは変更を認識し、フォームを保存することができます。

私は特定のフィールドをクリックしてドロップダウンをアクティブにし、このドロップダウンから正しいオプションを選択するコードを書くことができました。しかし、私はそれらの10ドロップダウンのすべてを介してループすると、効果は表示されません。

面白い部分があります。私が "debug.print objinputs.outerHTML"にブレークポイントを設定し、マクロを続行することができるようになると、変更が行われ、すべてが正常です。しかし、ブレークポイントがないと、何かが間違っていて、すべての値が "Read"に戻ります。ここで何が問題になるのか誰にも知らせてください。

これ以上の情報が必要な場合は、お知らせください。

Set ifrm = Nothing 
    Do Until ifrm.Length > 0 
     Set ifrm = IE.Document.getElementsByTagName("iframe")(0).contentDocument.getElementsByTagName("iframe")(1).contentDocument.getElementsByTagName("iframe")(0).contentDocument.getElementsByTagName("iframe")(0).contentDocument.getElementsByTagName("tbody")(znacznik - 1).Document.getElementsByTagName("td") 
    Loop 
    Counter = 1 
    For Each ele In ifrm 
     Worksheets("Test").Cells(Counter, 1) = ele.outerHTML 
     Counter = Counter + 1 
     If InStr(ele.outerHTML, "<td title=" & Chr(34) & "Read") Then 
      ele.Click 
      Do Until Not ele.Busy And ele.readyState = READYSTATE_COMPLETE: Loop 

      Set objInputs = Nothing 
      Set objInputs = IE.Document.getElementsByTagName("iframe")(0).contentDocument.getElementsByTagName("iframe")(1).contentDocument.getElementsByTagName("iframe")(0).contentDocument.getElementsByTagName("iframe")(0).contentDocument.getElementsByTagName("tbody")(znacznik - 1).Document.getElementsByTagName("select")(3) 

      objInputs.Value = "All" 
      Debug.Print objInputs.Value 

      Do Until Not IE.Busy And IE.readyState = READYSTATE_COMPLETE: Loop 

     End If 
    Next 

答えて

0

解決策が見つかりました。 これは最もエレガントなものではありませんが、私のニーズに十分対応しています。

私は、値の変更後の

CreateObject("WScript.Shell").Popup "Just Wait", 1, "Waiting" 

を追加して、それがトリックをしました。私はなぜそれが起こるのかを知りたいのですが、なぜこの「トリック」が問題を解決するのでしょうか?

関連する問題