WinXP,7のIE8にて新規セッションで起動

最近の書き込み件数: 今日 0件、昨日 0件
未読分:17件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

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

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

エクセルVBAでIE制御の応用編

こちらでは、エクセルVBAで実際に作成したIE(InternetExplorer)制御ツールをまとめています。自動ログインや情報収集など具体的に解説しています。IE(InternetExplorer)制御をされる方は参考にしてください。

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

スポンサー リンク

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

スポンサー リンク

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com