WinXP,7のIE8にて新規セッションで起動
未読分:17件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#17 2014年12月26日(金)10時19分 From: トントン | 返事 削除 変更 |
回答ありがとうございます! サンプルコードをコピーして入力しましたら無事に新規セッションでIEが起動してくれて、Outlookもスルーしてくれて、ログインまで問題無く起動してくれました! 長期間にわたってご指導頂き、ホントにありがとうございました! 年末までに作成することができてとても嬉しいです! ホントにありがとうございました! |
Message#16 2014年12月26日(金)10時05分 From: 旅しぐれ | 返事 削除 変更 |
どうやらあと一歩のところまで来たようですね。 ○IEの起動 ⇒ IEが起動して、HPが表示されたのであれば、その記述で OK です。そもそもの目的である『新規セッションで起動』 になっていたでしょうか? ○Call GetWindowThreadProcessIdのところでエラー ⇒ 何が邪魔しているのかと思ったら、Outlookでしたか…。 コードに直してみたので、こちらで試してください。 ------------------------------------------------------------ ' 指定されたウィンドウを作成したスレッドの ID を取得するAPI関数 ' http://msdn.microsoft.com/ja-jp/library/cc364779.aspx Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, ByRef ProcessId As Long) As Long Public Sub ろぐいん() ' IE を起動 Dim IEProcessId As Long ' 起動した IE のプロセスID IEProcessId = Shell("C:\Program Files\Internet Explorer\iexplore.exe -noframemerging http://") ' 起動した IE を探す Dim IE As Object Dim ShellObject As Object Set ShellObject = CreateObject("Shell.Application") Do While True ' ShellWindows のリストを取得し、その中から起動したIEを探す For Each Explore In ShellObject.Windows() ' 取得した ShellWindows のリストからIE, Explorer を抽出(Outlookを排除) If TypeName(Explore) = "IWebBrowser2" Then ' プロセスIDを取得 Dim CurrentProcessId As Long Call GetWindowThreadProcessId(Explore.hwnd, CurrentProcessId) ' 起動した IE のプロセスIDと比較 If CurrentProcessId = IEProcessId Then ' 見つけた IE のオブジェクトを回収 Set IE = Explore ' IE が見つかったので、Whileループを抜ける Exit Do End If End If Next ' ここに処理が来たときは、IEが見つからなかった ' (まだIEが起動中の場合は見つけることができない) ' 1秒待ってリトライする Call Application.Wait(Now + TimeValue("00:00:01")) Loop Set ShellObject = Nothing ' ここから先は元のコードが使えます ' 文字入力 IE.document.getElementById("ID").Value = UserID IE.document.getElementById("PASS").Value = UserPass (以下省略) |
Message#15 2014年12月26日(金)10時05分 From: VBAマスター | 返事 削除 変更 |
そもそも以下のIEButtonClick プロシージャですが、,(カンマ)で記述されていますが、ここでエラー起こっていないのですか? それともこちらの記述がただ間違っているだけでしょうか? もし,(カンマ)で記述されているのでしたら.(ドット)に治してから処理したらどうでしょうか。 'クリック Public Function IEButtonClick (ByRef IE As Object, ButtonValue As String) Dim ObjInput As Object For Each ObjInput In IE,document,getelementsbytagname("INPUT") If ObjInput,Value = ButtonValue Then ObjInput,Click Exit For End If Next End Function |
Message#14 2014年12月26日(金)10時03分 From: トントン | 返事 削除 変更 |
回答ありがとうございます! 早速指示を頂いた通りにやってみましたところ、IEの起動は指示頂いた3通り全部エラーで上手く起動してくれませんでした。こちらでいろいろと弄ってみましたら、 IEProcessId = Shell("C:\Program Files\Internet Explorer\iexplore.exe -noframemerging http://") という形で起動することができました!これで大丈夫でしょうか? 次に指示頂いた通りにコードを修正してうごかしてみたのですが、同じエラーで止まってしまいましたので、Exploreをウォッチで確認してみましたところ、 値が空欄で何も入っておらず、 型がVariant/Object/WebBrowser_V1 と表示されていました。 よろしくお願いします(_ _;) |
Message#13 2014年12月26日(金)10時02分 From: トントン | 返事 削除 変更 |
いろいろやってるうちにMicrosoftOutlookを起動していたからエラーがでて止まっていたようです! Outlookを落とした状態だと上手く動いてくれました! Outlookが起動していても動くようにしたいのですが、できますでしょうか…?^^; 何度も申し訳ありませんが、よろしくお願いします…>_<… |
Message#12 2014年12月26日(金)10時01分 From: 旅しぐれ | 返事 削除 変更 |
すいません、質問者さんの環境が WindowsXP であることを 見落としてました。サンプルは Windows7 で確認していたの で、それで動かないのかもしれません。こちらに WindowsXP がないので、正直苦しいですね…。 ○IEは起動するのですが、表示されるHPが〜(以下略) ⇒ まずは Google くらいは表示できるようにしないと先に進 みません。まずは『コマンドプロンプト』で以下のコマンド を1行ずつ実行してみてください。それぞれ IE が開いて Google が表示できますか? "C:\Program Files\Internet Explorer\iexplore.exe" -noframemerging "http://www.google.co.jp" "C:\Program Files\Internet Explorer\iexplore.exe" -noframemerging http://www.google.co.jp "C:\Program Files\Internet Explorer\iexplore.exe" http://www.google.co.jp 表示できる場合は、URL を表示したいHPに変えて試してください。 # 3つのコマンドのどれも表示できない場合は、ちょっと対処不能 # かもしれません。 ○Call GetWindowThreadProcessIdのところでエラーが〜(以下略) ⇒ こちらで検証ができないのであてずっぽうですが… Call GetWindowThreadProcessId(Explore.hwnd, CurrentProcessId) を Call GetWindowThreadProcessId(Explore.HWND, CurrentProcessId) に変えてみてください。 それでダメなら、このコードにブレークポイントを置いて、Explore 変数をウオッチで確認して、「値」と「型」に表示される内容の確認 をお願いします。 |
Message#11 2014年12月26日(金)10時00分 From: トントン | 返事 削除 変更 |
回答ありがとうございます! ご指示頂いた通り確認してみたところ、 (1).IEは起動するのですが、表示されるHPが『Request Error(invalid_request)』という画面になってしまい、Googleも含めてどのURLも開けない状態です。 (2).もう一度サンプルコードを全てコピーしてご指示頂いた通りコードの位置も確認してやってみたのですが、Call GetWindowThreadProcessIdのところでエラーが発生して『実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。』と出て止まってしまいます。 お手数ですがよろしくお願いします…><; |
Message#10 2014年12月26日(金)09時58分 From: 旅しぐれ | 返事 削除 変更 |
> 入力して起動してみたところ、なぜか > IEProcessId = Shell("""C:\Program 〜以下省略 > のところでHPを開くときにエラーが出てしまい、 > コード自体は動いているようなのですが、HPを > 開いてくれませんでした。 おや? このコードを実行すると IE が起動して HP が表示 されるはずですが、どこまで成功しているでしょうか? ・IE が起動しない ⇒ C:\Program Files\Internet Explorer\iexplore.exe が質問者さんのパソコンに存在するか確認してください ・IEは起動するがHPが表示されない ⇒ いったん指定する URL を http://www.google.co.jp/ に変更して実行してみましょう。Google は表示され ますか? > Call GetWindowThreadProcessId( 〜以下省略 > でオブジェクトが必要ですとのエラーがでてしまい サンプルの『--------』の行と『Public Sub ろぐいん()』 の行の間にあるコード『Private Declare Function〜』も コピーされているでしょうか? このコードがコピーされて いないとそのエラーが発生します。 このコードはプロシージャのコード(Sub)ブロックの中に 入れずに、外に記述してください。 |
Message#9 2014年12月26日(金)09時56分 From: トントン | 返事 削除 変更 |
こんなにも詳しくサンプルコードまで回答ありがとうございます! さっそくサンプルコードを参考に入力してみました! 入力して起動してみたところ、なぜか IEProcessId = Shell("""C:\Program Files\Internet Explorer\iexplore.exe"" -noframemerging ""http://""") のところでHPを開くときにエラーが出てしまい、コード自体は動いているようなのですが、HPを開いてくれませんでした。 HPのアドレスも間違っていないか確認しましたが、特に間違っている様子はありませんでした...。 その後、 Call GetWindowThreadProcessId(Explore.hwnd, CurrentProcessId) でオブジェクトが必要ですとのエラーがでてしまい、これ以上コードが進みません...。 何度も申し訳ありませんが、初めて見るコードばかりでヘルプを見てもよくわからず、助けてくれると嬉しいです。 |
Message#8 2014年12月26日(金)09時55分 From: 旅しぐれ | 返事 削除 変更 |
私が先に提案した方法では実現がかなり面倒そうということが わかりましたので、方針を転換します。以下にサンプルコード を作ってみましたので、こちらを参考にしてみてください。 注1) このサンプルでは、IEの起動に失敗した場合は無限ループが 発生してフリーズ状態になります。その問題の対処は、まぁ、 そちらで工夫してください。------------------------------------------------------------ ' 指定されたウィンドウを作成したスレッドの ID を取得するAPI関数 ' http://msdn.microsoft.com/ja-jp/library/cc364779.aspx Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, ByRef ProcessId As Long) As Long Public Sub ろぐいん() ' IE を起動 Dim IEProcessId As Long ' 起動した IE のプロセスID IEProcessId = Shell("""C:\Program Files\Internet Explorer\iexplore.exe"" -noframemerging ""http://""") ' 起動した IE を探す Dim IE As Object Dim ShellObject As Object Set ShellObject = CreateObject("Shell.Application") Do While True ' エクスプローラのリストを取得し、その中から起動したIEを探す For Each Explore In ShellObject.Windows() ' 候補のエクスプローラのプロセスIDを取得 Dim CurrentProcessId As Long Call GetWindowThreadProcessId(Explore.hwnd, CurrentProcessId) ' 起動した IE のプロセスIDと比較 If CurrentProcessId = IEProcessId Then ' 見つけた IE のオブジェクトを回収 Set IE = Explore ' IE が見つかったので、Whileループを抜ける Exit Do End If Next ' ここに処理が来たときは、IEが見つからなかった ' (まだIEが起動中の場合は見つけることができない) ' 1秒待ってリトライする Call Application.Wait(Now + TimeValue("00:00:01")) Loop Set ShellObject = Nothing ' ここから先は元のコードが使えます ' 文字入力 IE.document.getElementById("ID").Value = UserID IE.document.getElementById("PASS").Value = UserPass (以下省略) |
Message#7 2014年12月26日(金)09時50分 From: トントン | 返事 削除 変更 |
早速のご回答ありがとうございます! 指示頂いた通りに変更しましたらコンパイルエラーはなくなったのですが、値を変更しても新規セッションでIEが起動せず、一つ目に開いてログインした情報を引き継いだままになり、二つ目ではログイン画面に行くことができませんでした。 最初に起動したIEでログインした後に、新規セッションで別IDを使ってログインは難しいのでしょうか…? |
Message#6 2014年12月26日(金)09時49分 From: 旅しぐれ | 返事 削除 変更 |
Call IE.navigate2("http://", &H8000) でお願いします。 |
Message#5 2014年12月26日(金)09時49分 From: トントン | 返事 削除 変更 |
引き続きの回答ありがとうございます! 先程試してみたのですが、『&H8000』にて起動しようとすると前回と同じくステートメントの最後というコンパイルエラーが発生してしまい、上手く動きませんでした。 値を変更したり、『& H8000』とスペースを入れてみたりもしましたが、値を変更した場合はコンパイルエラーが発生、&の後ろにスペースを入れた場合はエラーは発生しませんでしたが、今と変わらず現在ログインしている情報を引き継いだままIEが起動し、新規セッションでの起動はできませんでした。 他にもなにか対応策はあったりするのでしょうか…? あれば何でも試してみようと思いますので、教えて頂けると嬉しいです。 |
Message#4 2014年12月26日(金)09時48分 From: 旅しぐれ | 返事 削除 変更 |
すいません。16進数の指定を誤ってました。 × IE.navigate2 "http://" 0x8000 ○ IE.navigate2 "http://" &H8000 先の回答のページに記載されている値を試す時も、 先頭の 0x を &H に変更してください。 |
Message#3 2014年12月26日(金)09時46分 From: トントン | 返事 削除 変更 |
回答ありがとうございます! 早速指示頂いた通りに変更してみたのですが、コンパイルエラーが発生してしまい、値を変更しても動きませんでした。 他にもなにか対応策があれば教えて頂けると助かります。 |
Message#2 2014年12月26日(金)09時45分 From: 旅しぐれ | 返事 削除 変更 |
IE.navigate "http://" を IE.navigate2 "http://" 0x8000 としてみたらどうでしょう。 それでダメなら、以下のページを参考に 0x8000 のところに 指定する値を変えて試してみてください。 参考URL:http://msdn.microsoft.com/ja-jp/library/aa768360%28v=vs.85%29.aspx |
Message#1 2014年12月26日(金)09時39分 From: トントン | 返事 削除 変更 |
VBAを使用してWebサイトにログインを行いたいのですが、ログインをする際に必ず新規セッションでウィンドウを起動してログインするようにするにはどのようなコードを組めばいいのでしょうか? 下記のようなコードで現在は動かしているのですが、explore.exe -noframemergingで起動すれば新規セッションでIEを開けるとのことだったのですが、上手く組み込むことができません・・・。 どのようにすれば上手く動くのでしょうか・・・。 申し訳ありませんがどなたかご教授願います。 '========================================= sub ろぐいん() '変数 Dim IE As Object Dim UserID As String Dim UserPass As String 'ID,PASS設定 UserID = "ID" UserPass = "PASS" 'IE起動 Set IE = CreateObject("InternetExproler.Application") IE.Visible = True '接続 IE.navigate "http://" '文字入力 IE.document.gatelementbyid("ID").Value = UserID IE.document.gatelementbyid("PASS").Value = UserPass '送信 Call IEButtonClick(IE, " 送信 ") Set IE = Nothing End Sub 'クリック Public Function IEButtonClick (ByRef IE As Object, ButtonValue As String) Dim ObjInput As Object For Each ObjInput In IE,document,getelementsbytagname("INPUT") If ObjInput,Value = ButtonValue Then ObjInput,Click Exit For End If Next End Function |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降