• 締切済み

VBで、IEオブジェクトでダイアログが出たとき操作する。

Dim wbrowser as object Set wBrowser = CreateObject("InternetExplorer.Application") ’item(11)はボタン wBrowser.all.Item(3).Click ここで、 通常なら問題なく次ページに移動するのですが、 メッセージボックス(javaのalertかconfirmなど)が表示され 「はい・キャンセル」や「OK」 を選択する、メッセージボックスが表示されるような場合、その前 にIEオブジェクトに制御が移動するようで、最後のクリックした段階で VB側から制御不能ととなります。 VBのみでメッセージボックスを閉じる方法等 何方か解決策がありましたらお教え下さい。 ちなみにぐぐりまくっていたら、 こんな人力検索に行き当たりました。 http://q.hatena.ne.jp/1174026115 解決はしているようですが、 ソースがないので私にはわかりませんでした・・・

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

見つけたページの非同期にクリックする手法を採用します もう一つ フォームにボタンを追加します 仮に Button2とします 先のイベントで非同期のスクリプトを記述し次の行に Button2.SetFocus としておきます ボタン2のクリックイベントで AppActivate wBrowder SendKeys "{Enter}" としておきます 変数 wBrowserは フォームの宣言部で宣言してボタン2のイベントでも共通に使えるようにしてください

関連するQ&A

  • VBでのIE操作

    VBでのIE操作をしようとして色々調べています。 色んなサイトを見ながら途中までは何とかできましたが、どうしてもリンク先を表示できません。 お分かりになる方いましたら、お力添えいただければ幸いです。 状況: Excel2007使用  IE7  VB初心者です。 やりたい内容: VBでIEを立ち上げる ↓ ページからリンクをクリックする (ページ上に画像が貼り付けてあって、そこにURLくっついててハイパーリンクになっている。) (セキュリティの関係でハイパーリンク先を初期で表示することはできない。) ↓ 表示されたページに検索したい項目を入力 ↓ 結果をエクセルに反映する。 以上の作業をVBで組もうと思ってます。 よろしくお願いします。 Option Explicit Sub IE_Test() 'IEの起動 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '処理したいページを表示します。 objIE.Navigate "(表示したいページ)" 'ページの表示待ち   While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend '開かれたIEを探す。 Dim objSHELL As Object Dim objWINDOW As Object Dim newIE As InternetExplorer '調べる項目に対して、、、 For yCNT = 3 To 102 ' If Trim(Cells(yCNT, 1)) = "" Then Exit For 'A列が空白になったらループを抜ける ここがわからない。。。 (画像になっているハイパーリンクをクリックしたい、、、) 'シェルのオブジェクトを作成する Set objSHELL = CreateObject("Shell.Application") Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1) Set objSHELL = Nothing '念のため、新しいウインドウの表示を待つ While newIE.readyState <> READYSTATE_COMPLETE Or newIE.Busy = True DoEvents Wend 'ページが表示されたので、表示された文章に対して、処理を行います。 newIE.document.all("phone_no").Value = Cells(yCNT, 1) 'A列の文字を参照する newIE.document.all("exec").Click '表示されたウインドウ(newIE)からデータをセットする Cells(yCNT, 2) = newIE.document.body.innerText '検索の結果をエクセルに反映 '新しいIE(子IE)を閉じる newIE.Quit Set newIE = Nothing '前のIE(親IE)を閉じる   objIE.Quit set objIE = Nothing Next yCNT End Sub 上記が現在までのできているコードです。 ここにも色々間違いがある可能性もあります。 ご指摘頂けましたら幸いです。 よろしくお願いします。

  • VBでのIE操作

    VBでのIE操作をしようとして色々調べています。 色んなサイトを見ながら途中までは何とかできましたが、どうしてもリンク先を表示できません。 お分かりになる方いましたら、お力添えいただければ幸いです。 状況: Excel2007使用  IE7  VB初心者です。 やりたい内容: VBでIEを立ち上げる ↓ ページからリンクをクリックする (ページ上に画像が貼り付けてあって、そこにURLくっついててハイパーリンクになっている。) (セキュリティの関係でハイパーリンク先を初期で表示することはできない。) ↓ 表示されたページに検索したい項目を入力 ↓ 結果をエクセルに反映する。 以上の作業をVBで組もうと思ってます。 よろしくお願いします。 Option Explicit Sub ie_test() 'IEの起動 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '処理したいページを表示します。 objIE.navigate "処理したいページ" 'ページの表示待ち While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend '開かれたIEを探す。 Dim objSHELL As Object Dim objWINDOW As Object Dim newIE As InternetExplorer Dim wait_time As Date Dim yCNT As Long Dim i As Integer '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop 'リンクの貼ってある画像をクリック For i = 0 To objIE.document.images.Length - 1 If InStr(objIE.document.images.Item(i).outerHTML, "image/btn131b1.gif") > 0 Then objIE.document.images.Item(i).Click End If Next '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop 'シェルのオブジェクトを作成する Set objSHELL = CreateObject("Shell.Application") Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1) Set objSHELL = Nothing '新しいウィンドウのログインボタンを押す Dim objINPUT As Object 'Inputタグ格納用 For Each objINPUT In newIE.document.all.tags("INPUT") If objINPUT.Value = "ログイン" Then objINPUT.Click Exit For End If Next '調べる項目 For yCNT = 3 To 1002 ' If Trim(Cells(yCNT, 1)) = "" Then Exit For 'A列が空白になったらループを抜ける 'ページが表示されたので処理を行います。 newIE.document.all("phone_no").Value = Cells(yCNT, 1) 'A列の文字を参照する newIE.document.all("exec").Click ※ここでオブジェクト変数。。。のエラーが発生する※ '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop '表示されたウインドウからデータをセットする Cells(yCNT, 2) = newIE.document.body.innerText '検索の結果をエクセルに反映 '新しいIEを閉じる newIE.Quit Set newIE = Nothing '前のIEを閉じる objIE.Quit Set objIE = Nothing Next yCNT End Sub 初心者なので色々調べたのですがわかりませんでした。。。

  • IE7のVB.NETでの操作

    Dim IE as Object Dim f As Object IE = CreateObject("InternetExplorer.Application") f = IE.document.forms(0) f.sentaku.click() このようにしてIEのボタンを押そうと考えているのですが、f = IE.document.forms(0)のところでエラーがでて止まってしまいます。 IE7はこのような操作はできなくなってしまったのでしょうか。 IEを終了して開き直して試しても同じ結果で困っています。 解決策を教えてください。 よろしくお願いします。

  • vb6を使用しています。VBAの構文をvb6に置き換えて作りましたがう

    vb6を使用しています。VBAの構文をvb6に置き換えて作りましたがうまくいきません。 VBAの構文はプリンターのダイアログボックスを表示するもので Application.Dialogs(xlDialogPrinterSetup).Show これをvb6で下記のようにしました Set objXL = CreateObject("Excel.Application") objXL.Dialogs(xlDialogPrinterSetup).Show ところがxlDialogPrinterSetupの部分で「変数が定義されてません」とでます。 どうすればいいのでしょう?

  • VBかjavascriptで作成したのですがどうもうまくいきません。

    作りたい物は、何時になったらイベントを発生させるという物なのですが、動くんですが違和感?みたな感じがします。 例 現在時刻7:00→メッセージボックスで『朝です!』 現在時刻12:00→メッセージボックスで『お昼です!』 現在時刻19:00→メッセージボックスで『夜です!』 のような感じでつくりたいです。 javascriptでは作ったのですが、同じスクリプトをイベントごと記入したので、とてもごみごみしてしまいました。あと、window.alertを使って表示させたのですが、他の作業をしているときはalertに全く気付きません。 alertを最上位に出すほうほうありませんでしょうか? しかし、javascriptだとごみごみしがちなので、VBで作ろうかという感じなのですが、少しかじった程度なので、タイマーとか基礎の部分しか知りません。 よかったらVBで作ってくださいww よろしくお願いします☆

  • VB5.0からExcel97にデータを書き込むとき

    VB5.0からExcel97にデータを書き込んだりする場合、最初にVBのほうで どういう設定をしなければいけないのでしょうか? 参照設定でMicrosoft Excel 8.0 Object Libraryを選択していて 以下の文をVBに設定しています。 Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") これだけだと、起動したときに"Excel.Application"の部分が 「型が一致しません」でエラーになります。 何か足りない設定があるのでしょうか? 説明がわかりにくいかと思いますが、どうしたらいいかなかなか わかりません。どうぞよろしくお願いします。

  • VBでブラウザを操作するには?

    ■利用環境 WinXP SP3 VB2008 ExpressEdition IE7 ■質問 VB始めたばかりで初心者です。 VBSで行っていたIEオブジェクトの自動操作をVBのフォーム デザインを使ってビジュアル的に作り変えたいのですが MSDNもろくに読めなくて前に進めません。 VBは、イベント駆動と言うのは、理解しているつもりですが、 CreateObject("InternetExplorer.Application") とブラウザコントロールの違いに戸惑っています。 IEオブジェクトとWebBrowserオブジェクトの使い方の違いの事です。 VBSのIEオブジェクトで行っていた操作は、 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate(URL) IE.document.body.InnerHTML と言う操作をしたいのですが、 できれば、このように私が慣れているIEオブジェクトの操作で ページ表示だけ、VBのブラウザオブジェクトに反映させる事が できれば良いのですが、難しければ、 VBのコントロールのブラウザオブジェクトで これと同じ操作をするにはどうすればよいか 教えて頂けませんでしょうか?

  • VBスプレッドシート

    スプレッドシートのチェックボックスで クリックされた時のValueを取得したいのですが、 チェックボックスをクリックしても認識していないようです、、、 クリックしてチェックがつくようにするにはどのような制御をかけるの教えてください>< よろしくお願いします。 環境は、VB6.0+SPREAD 3.0です。

  • VBAによるIE操作について、ログイン語の認証。

    作りたいマクロは、 1、企業の製品リストページにアクセスする。 Sub pncheck() Set ie = CreateObject("InternetExplorer.application") ie.Visible = True ie.Navigate ("https://w3-06.xxxxxxxxx.wss") 2、すでにパスワードはIE上に記憶されているので、ログイン自体はできるのですが、 「This page contains both secure and nonsecure items. Do you want to display non-secure item?」というメッセージボックスが出てきて、「yes」をクリックする必要があります。 これは恐らく日本語では、「要求したページは暗号化されていますが、暗号化されていない項目を含んでいます。あなたがこのページで表示や入力する情報は第三者が簡単に傍受できます。」という、よくログイン後に現れるメッセージボックスだと思います。 3、その後、partsno_01から、partsno_20までのテキストボックスに、エクセルのセルA1から、A20までにある製品番号を入力し、データをsubmitします。 4、ヒットした製品のリストがテーブルとして表示されるので、それをエクセルに貼り付ける。 というものなのですが、 このログイン後の認証はどうすればいいのでしょうか?

  • VB6→Access2000

    OSはNT4.0です。VB6でプログラムを組んでいます。 データベースソフトはAccess2000です。 プログラムを実行すると【データベースの形式’ (データベースファイル名が表示)’を認識できません。】というメッセージボックスが表示されます。そのメッセージボックスにあるヘルプをクリックすると '項目' (Error 524)このエラーは、現在実行中のオートメーション オブジェクト内で発生しました。 と表示されまして、解決できません。 Accessの機能にある【MicroSoft Accessの旧バージョンのデータベースに変換】を行い、プログラムを実行すると動くのですが旧バージョンだというメッセージボックスが表示され使い勝手が非常に悪いです。何が悪いのでしょうか?