[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでIE操作』(あや)
2003 XP IE9
あまり詳しくないため説明がわかりにくかったらすみません
別会社に委託したシステムがあり、 作られた環境はIE9 HTMLとjavascriptで作られています。
そこでVBAからIEの操作が出来るので、 単純な作業は組んでしまえないかなと思い 試行錯誤しております。
作業している流れは、 システムのURLにアクセス ↓ ログインIDをテキストボックスに表示 ↓ ログインボタン押す
ここまでは出来ました。
Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "□□□ " ’システムへのパス
For Each obj In objIE.Document.forms(0) If obj.Name = "User" Then obj.innerText = "000" Exit For End If Next
For Each obj In objIE.Document.getElementsByTagName("input") If obj.ID = "roguinButton" Then obj.Click Exit For End If Next
無事にログイン後の画面が開くので、次の作業に入りたいのですが
ウォッチ式で確認していた、 obj.ID の値が <オートメーション エラーです。 起動されたオブジェクトはクライアントから切断されました。 > となり取得できずにいます。
考えたこととしては、 ログイン後の画面がNewPage?というのか、 リンク先URLを新しいウィンドウで開いている感じで objIEの値がクリアされてしまっているのではないかと思っています。
以下はよく参考にさせてもらっているページです http://www.ken3.org/vba/backno/vba163.html しかしどのようにしたら今の環境で使えるのかわからずにいます
リンク先のNewPageの objIEの情報を取りたいのですが、どのようにしたら良いでしょう。
IE の表示状態が切り替わったタイミングで、変更前のオブジェクトは(objIEは別)使用 できなくなります。 マクロは画面の状態を常に把握しながら動作する必要があります。 ログオン後は新しいウィンドウ(もしくは新しいタブ)が開くのですか?もしくはログオンの ウィンドウの中身が違う内容になるのでしょうか。
別ウィンドウであれば、objIE 自体も別のものを指す必要があります。タブが異なる場合も それを指定する処理が必要です。 後者であれば objIE 自体は変わりないので、そのまま使用できます。 (Mook)
Mookさんありがとうございます わたしの文章では足らない部分がありすみません、
ログオン後は ログイン画面は閉じて、新たにIEが開いています。 同じIE内にタブが作られるわけではないようです。
今の状況です
新たに開いたウィンドウのURLが取得できたら なんとかなるかな?と思い方法を検索していて
[[20091129091530]] 『VBAでieのアクティブなタブの情報を取得するには』(d_ue)
を見つけました。
しかしIE9では動かないようです。
また何かありましたら教えてください
(あや)
ボタンクリック後に、以下の1行を追加して、更新完了待ちしてみてください。
Call sWait(obj)
以下のルーチンも併せて追記。
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub sWait(OBJ As Object) Sleep 1000 While OBJ.readyState <> 4 While OBJ.Busy = True DoEvents Sleep 100 Wend Wend Sleep 1000 End Sub
(???)
???さんありがとうございます
教えて頂いた記述を ログインボタンを押した後に追加してみました。
しかし結果は同じく、 obj.ID の値が <オートメーション エラーです。 起動されたオブジェクトはクライアントから切断されました。 > となります。
画面の更新がついてきているか確認しながら デバッグで1行づつも進めてみましたが 結果は同じでした。
>新たな画面をポップアップさせるとは考えにくい そうでしたか…
なにか検証方法がないかなと試してみました タスクマネージャのアプリケーションタプを表示させ、 システムを起動、ログインしたところ タスクにIEのアイコンが新たに追加されることなく 現在あるログインのアイコンが、ログイン後のIE画面と変化していましたので ???さんのおっしゃるように 新たな画面をポップアップしているわけではないと思いました。
こんな確認方法で良いのかわかりませんけど…
また何かありましたら教えてください。
(あや)
次案として、直接ログイン後の画面を表示してみる事はできないでしょうか?
HTMLを調べて、ログインボタンを押した後に、どのようなURLを実行しているか。
おそらく、ログイン名等を追加した形になっているはずなので、それをVBAから直接
開くのです。
ただ、ログインの際にセッションID等を発生させる場合も多いので、この場合は
ログインは今のままで行い、その後に改めてボタン後のURLを開く形になります。
(???)
取りあえず、こんなのでさらってみると、そのウィンドウも含まれてきますか?
Sub detect() Dim Windw As Object
For Each Windw In CreateObject("Shell.Application").Windows Debug.Print Windw.LocationURL Next End Sub
(半平太) 2013/05/16(Thu) 16:20
上の経緯を読んでいると、同じウィンドウのように思えるのですが、 最初のコードの最後に
MsgBox "新しいウィンドウの表示が完了したら OK を押してください。" objIE.Visible = False Sleep 2000 objIE.Visible = True
を追加したら、その新しいウィンドウは2秒間消えるでしょうか。エラーが出るでしょうか。 コードのあるモジュールの先頭に Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) も追加してください。
消えて見えるようでしたら、操作だけの問題だと思います。
IE の表示内容が変わった場合、 >obj.ID の値が ><オートメーション エラーです。 は当然の動作(ユーザ認証フォームは消えるので)だと思いますので、これは気に しないほうがよいと思います。 (Mook)
???さんありがとうございます
>ログイン名等を追加した形になっているはずなので、 はい。そのとおりです。
ログイン後に、 objIE.Navigate " " ログイン後表示されている画面のアドレス
を記述し、実行すると
3種類の動きがあり…
1 再度ログイン画面になる 1行デバッグすると、追加したobjIE.Navigate のところを読み込むと ログイン画面になっているようです
2 「システムエラーです」というメッセージがIE上に表示される IEのエラーではなくシステムが出力しているエラーのよう
3 ログイン後の画面が表示されているだけで、無反応
検証の余地ありですが、ひとまずの報告とさせて頂きます
半平太さんありがとうございます
含まれてきます 次に確認することがあれば教えてください。
Mookさんありがとうございます
>追加したら、その新しいウィンドウは2秒間消えるでしょうか。 消えていませんでした
ログイン後の画面のobjIEが変数なしになっているため、 visibleが設定できていないようです
(あや)
あら、そうですか。 だとすると、IE が別起動しているのでしょうか。
確認するには、いろいろな方法があると思いますが、タスクマネージャが使えるようでし たら、「プロセス」タブで「表示」⇒「列の選択」で PID にチェックを入れ、 ログオン画面表示時の iexplore.exe の PID を控えておき、別起動していれば ログオン後 にこれが変わると思います。
これが変わっているのであれば、半平太さんがやっているような方法で、該当ウィンドウ を探し、それを制御するなどが対応方法でしょうか。 「GetObject VBA IE」などで検索するとサンプルが見つかるかな? (Mook)
> 半平太さんありがとうございます > 含まれてきます > 次に確認することがあれば教えてください。
そう云うことでしたら、問題のWindwに辿りついたら、 そのWindowをObjIEに代入して操作を続行できませんか?
Sub detect1() Dim Windw As Object Dim ObjIE As InternetExplorer For Each Windw In CreateObject("Shell.Application").Windows If Windw.LocationURL = "問題となっているWindowのもの" Then Set ObjIE = Windw Exit For End If Next 'got It End Sub
(半平太) 2013/05/16(Thu) 19:23
Mookさん PIDは初めて知りました 教えてくれてありがとうございます
しかし、ログイン画面を出しても IEXPLORE.EXEという項目があがってこないのです
サーバーに関して全くの素人なんで曖昧ですが… クラウドシステムを採用しているようで 仮想のパソコン上にIEが開いている状態なのかな?と 考えております。
曖昧なままの書き込みですみません。
半平太さん ご丁寧にありがとうございます 教えて頂いた記述でアドレスを取得しIEの中身も取れました 進めてみます^^
また何かありましたら教えてください
(あや)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.