エクセルvbaでIEの制御を行っていますが、ポップアップの確認ウインドウの操作ができません。
未読分:8件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#8 2015年9月15日(火)19時55分 From: OGAWA | 返事 削除 変更 |
いつもありがとうございます 私もわざとClickの後にコードを入れてデバッグしてみたりしましたが Click‘のコードまで行って、新しいウインドウが開くとハングアップしてvbaが先に進まなくなってしまいます Webのボタンを押してやるとプログラムが進みます 他の外部プログラムの制御もいくつか作っておりますが‘Sendkyesは正常に送れます。 Clickしてウィンドウが開いたときに、何かが邪魔をしているようです。 コーディングには大きな間違えがなさそうなので、この質問はこの辺にしていろいろ調べてトライしてみます。 ご親切なご回答ありがとうございました > > 手動で確認ボタンをクリックするとやっとExit Forに進みますので > > その後のSendKeys までvbaが走らず止まった状態になっていました。 > > webでいろいろ探しましたが原因がわかりませんでした。 > > ブラウザとVBAは連動してないので、処理が止まるというのは考えにくいですね。 > よくあるのはクリック処理のあとにIE表示待ち処理をいれているため、次の処理へうつらないということはあります。 > > > > > For nloop = 0 To objA.Length - 1 > > If InStr(objA(nloop).outerHTML, "LOGOUT") > 0 Then > > objA(nloop).Click 'クリックする > > Exit For 'ループを抜ける > > End If > > Next > > > > こちらは見る限りでは、クリック処理だけなのですが、 > > For nloop = 0 To objA.Length - 1 > If InStr(objA(nloop).outerHTML, "LOGOUT") > 0 Then > objA(nloop).Click 'クリックする > Call IE表示待ち(1) > Exit For 'ループを抜ける > End If > Next > > > のようなVBAで処理がとまるようなものが入ってないですか? |
Message#7 2015年9月15日(火)17時22分 From: VBAマスター | 返事 削除 変更 |
> 手動で確認ボタンをクリックするとやっとExit Forに進みますので > その後のSendKeys までvbaが走らず止まった状態になっていました。 > webでいろいろ探しましたが原因がわかりませんでした。 ブラウザとVBAは連動してないので、処理が止まるというのは考えにくいですね。 よくあるのはクリック処理のあとにIE表示待ち処理をいれているため、次の処理へうつらないということはあります。 > For nloop = 0 To objA.Length - 1 > If InStr(objA(nloop).outerHTML, "LOGOUT") > 0 Then > objA(nloop).Click 'クリックする > Exit For 'ループを抜ける > End If > Next > こちらは見る限りでは、クリック処理だけなのですが、 For nloop = 0 To objA.Length - 1 If InStr(objA(nloop).outerHTML, "LOGOUT") > 0 Then objA(nloop).Click 'クリックする Call IE表示待ち(1) Exit For 'ループを抜ける End If Next のようなVBAで処理がとまるようなものが入ってないですか? |
Message#6 2015年9月15日(火)12時40分 From: Ogawa | 返事 削除 変更 |
ここで止まっています 下記の objA(nloop).Click 'クリックする まで行って確認ウインドウが出ますが、その後のExit Forに移らず vbaがフリーズしています。 手動で確認ボタンをクリックするとやっとExit Forに進みますので その後のSendKeys までvbaが走らず止まった状態になっていました。 webでいろいろ探しましたが原因がわかりませんでした。 For nloop = 0 To objA.Length - 1 If InStr(objA(nloop).outerHTML, "LOGOUT") > 0 Then objA(nloop).Click 'クリックする Exit For 'ループを抜ける End If Next > 了解しました。 > tabキーでフォーカス試してみます。 > 明日から週末まで出張してます。 > コンピューターが使えないので週末に、じっくりとやってみます。 > ありがとうございました > > > > sendkeysでtabも ENTER も反応してないようなのでウインドウがでたままログアウトできない状態です。 > > > > sendkeysの記述自体は間違っていないので、どこかでtabキーが処理されていると思います。 > > まず、どこにフォーカスがあたっているか確認してみてください。 > > そのポップアップ画面がどのように表示させているか分かりませんが、tabキーを連続処理させてみれば、どこにフォーカスが移動しているか確認できるかもしれません。 |
Message#5 2015年9月14日(月)16時38分 From: Ogawa | 返事 削除 変更 |
了解しました。 tabキーでフォーカス試してみます。 明日から週末まで出張してます。 コンピューターが使えないので週末に、じっくりとやってみます。 ありがとうございました > > sendkeysでtabも ENTER も反応してないようなのでウインドウがでたままログアウトできない状態です。 > > sendkeysの記述自体は間違っていないので、どこかでtabキーが処理されていると思います。 > まず、どこにフォーカスがあたっているか確認してみてください。 > そのポップアップ画面がどのように表示させているか分かりませんが、tabキーを連続処理させてみれば、どこにフォーカスが移動しているか確認できるかもしれません。 |
Message#4 2015年9月14日(月)10時58分 From: VBAマスター | 返事 削除 変更 |
> sendkeysでtabも ENTER も反応してないようなのでウインドウがでたままログアウトできない状態です。 sendkeysの記述自体は間違っていないので、どこかでtabキーが処理されていると思います。 まず、どこにフォーカスがあたっているか確認してみてください。 そのポップアップ画面がどのように表示させているか分かりませんが、tabキーを連続処理させてみれば、どこにフォーカスが移動しているか確認できるかもしれません。 |
Message#3 2015年9月14日(月)07時28分 From: Ogawa | 返事 削除 変更 |
VBAマスターのメッセージ(#2)への返事 お世話になります まず objA(nloop).Click 'クリックする とログアウト確認のウインドウが現れます。 「終了します、よろしいですか。」のメッセージにYesとNoのボタンが表示されます (vbaのメッセージボックスのような感じです) そのYesボタンをクリックしたいのですが sendkeysでtabも ENTER も反応してないようなのでウインドウがでたままログアウトできない状態です。 SendKeys "{ENTER}"では yesボタンが押せないのでしょうか > これは1つのモジュール内での処理ですか? > objIEの適用範囲はモジュール内でかつ他にログイン処理があるものとして回答しますが、 > > objA(nloop).Click 'クリックする > > のあとにSleepで5秒停止させていますが、そのあとのTabキー処理は遷移はどのようになっていますか? > > こちらのtabキーで「はい」なり「OK]なりをクリック処理するのかと思いますが、sendkeysでtabキーがまず正常に働いているのかを確認してください。 > > あと、ログアウト処理ですが、ログアウトのページへ移動するかと思いますが、クリック処理せずにログアウトページを開いたら自動的にログアウトできるようなサイトではないですか? > > そのような仕様であれば、URL指定だけでログアウトできるかと思います。 |
Message#2 2015年9月13日(日)23時57分 From: VBAマスター | 返事 削除 変更 |
これは1つのモジュール内での処理ですか? objIEの適用範囲はモジュール内でかつ他にログイン処理があるものとして回答しますが、 objA(nloop).Click 'クリックする のあとにSleepで5秒停止させていますが、そのあとのTabキー処理は遷移はどのようになっていますか? こちらのtabキーで「はい」なり「OK]なりをクリック処理するのかと思いますが、sendkeysでtabキーがまず正常に働いているのかを確認してください。 あと、ログアウト処理ですが、ログアウトのページへ移動するかと思いますが、クリック処理せずにログアウトページを開いたら自動的にログアウトできるようなサイトではないですか? そのような仕様であれば、URL指定だけでログアウトできるかと思います。 |
Message#1 2015年9月13日(日)10時21分 From: Ogawa | 返事 削除 変更 |
初めて質問させていただきます エクセルvbaでIEの制御を行っていますが、ポップアップの確認ウインドウの操作ができません。 下記コードです、よろしくお願いします ポップアップ確認ウインドウのソース <a class="menu" href="#" onclick="confirmMovePage('ログアウト確認','ログ アウトします。よろしいですか?', 'http://'); return false;">LOGOUT</a> 操作サブルーチン Option Explicit Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Sub keybd_event Lib "user32" _ () ' (ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Declare Function GetKeyboardState Lib "user32" () Sub ログアウトTest() '****************************** ' ログアウト '****************************** Dim nloop As Integer '-------------------------------- Dim objA As Object '-------------------- Set objA = objIE.Document.getElementsByTagName("a") '-------------------------------- For nloop = 0 To objA.Length - 1 'OuterHTMLでAの全体を見る 'ソースの文字を探す If InStr(objA(nloop).outerHTML, "LOGOUT") > 0 Then objA(nloop).Click 'クリックする Exit For 'ループを抜ける End If Next '-------------------------------- 'ポップアップ処理 Sleep 5000 '---------------------- ' SendKeys "{TAB}" SendKeys "{ENTER}" '-------------------------------- Set objA = Nothing 'オブジェクト変数解放 '-------------------------------- '画面表示完了を待つ Call IE表示待ち(1) '-------------------------------- '****************************** End Sub |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降