WinXP,7のIE8で新規セッションでログインするVBAのコード

このQ&Aのポイント
  • VBAを使用してWinXPまたはWin7のIE8で新規セッションでウィンドウを起動し、Webサイトにログインする方法を教えてください。
  • 現在動かしているコードでは上手く動かないため、explore.exe -noframemergingを使用して新規セッションでIEを起動する方法を組み込みたいです。
  • 現在使用しているコードでは、IEを起動し、IDとパスワードを入力してログインしています。どなたか助けてください。
回答を見る
  • ベストアンサー

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

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 '=========================================

  • Lily0
  • お礼率90% (9/10)

質問者が選んだベストアンサー

  • ベストアンサー
noname#212058
noname#212058
回答No.7

回答No.1 です。 どうやらあと一歩のところまで来たようですね。 ○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 (以下省略)  

Lily0
質問者

お礼

回答ありがとうございます! サンプルコードをコピーして入力しましたら無事に新規セッションでIEが起動してくれて、Outlookもスルーしてくれて、ログインまで問題無く起動してくれました! 長期間にわたってご指導頂き、ホントにありがとうございました! 年末までに作成することができてとても嬉しいです! ホントにありがとうございました!

その他の回答 (6)

noname#212058
noname#212058
回答No.6

回答No.1 です。 すいません、質問者さんの環境が 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    変数をウオッチで確認して、「値」と「型」に表示される内容の確認    をお願いします。

Lily0
質問者

お礼

回答ありがとうございます! 早速指示を頂いた通りにやってみましたところ、IEの起動は指示頂いた3通り全部エラーで上手く起動してくれませんでした。こちらでいろいろと弄ってみましたら、 IEProcessId = Shell("C:\Program Files\Internet Explorer\iexplore.exe -noframemerging http://") という形で起動することができました!これで大丈夫でしょうか? 次に指示頂いた通りにコードを修正してうごかしてみたのですが、同じエラーで止まってしまいましたので、Exploreをウォッチで確認してみましたところ、 値が空欄で何も入っておらず、 型がVariant/Object/WebBrowser_V1 と表示されていました。 よろしくお願いします(_ _;)

Lily0
質問者

補足

いろいろやってるうちにMicrosoftOutlookを起動していたからエラーがでて止まっていたようです! Outlookを落とした状態だと上手く動いてくれました! Outlookが起動していても動くようにしたいのですが、できますでしょうか…?^^; 何度も申し訳ありませんが、よろしくお願いします…>_<…

noname#212058
noname#212058
回答No.5

回答No.1 です。 > 入力して起動してみたところ、なぜか > 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)ブロックの中に 入れずに、外に記述してください。

Lily0
質問者

お礼

回答ありがとうございます! ご指示頂いた通り確認してみたところ、 (1).IEは起動するのですが、表示されるHPが『Request Error(invalid_request)』という画面になってしまい、Googleも含めてどのURLも開けない状態です。 (2).もう一度サンプルコードを全てコピーしてご指示頂いた通りコードの位置も確認してやってみたのですが、Call GetWindowThreadProcessIdのところでエラーが発生して『実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。』と出て止まってしまいます。 お手数ですがよろしくお願いします…><;

noname#212058
noname#212058
回答No.4

回答No.1です。 私が先に提案した方法では実現がかなり面倒そうということが わかりましたので、方針を転換します。以下にサンプルコード を作ってみましたので、こちらを参考にしてみてください。 注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 (以下省略)

Lily0
質問者

お礼

こんなにも詳しくサンプルコードまで回答ありがとうございます! さっそくサンプルコードを参考に入力してみました! 入力して起動してみたところ、なぜか IEProcessId = Shell("""C:\Program Files\Internet Explorer\iexplore.exe"" -noframemerging ""http://""") のところでHPを開くときにエラーが出てしまい、コード自体は動いているようなのですが、HPを開いてくれませんでした。 HPのアドレスも間違っていないか確認しましたが、特に間違っている様子はありませんでした...。 その後、 Call GetWindowThreadProcessId(Explore.hwnd, CurrentProcessId) でオブジェクトが必要ですとのエラーがでてしまい、これ以上コードが進みません...。 何度も申し訳ありませんが、初めて見るコードばかりでヘルプを見てもよくわからず、助けてくれると嬉しいです。

noname#212058
noname#212058
回答No.3

回答No.1です。 Call IE.navigate2("http://", &H8000) でお願いします。

Lily0
質問者

お礼

早速のご回答ありがとうございます! 指示頂いた通りに変更しましたらコンパイルエラーはなくなったのですが、値を変更しても新規セッションでIEが起動せず、一つ目に開いてログインした情報を引き継いだままになり、二つ目ではログイン画面に行くことができませんでした。 最初に起動したIEでログインした後に、新規セッションで別IDを使ってログインは難しいのでしょうか…?

noname#212058
noname#212058
回答No.2

回答No.1です。 すいません。16進数の指定を誤ってました。 × IE.navigate2 "http://" 0x8000 ○ IE.navigate2 "http://" &H8000 先の回答のページに記載されている値を試す時も、 先頭の 0x を &H に変更してください。

Lily0
質問者

お礼

引き続きの回答ありがとうございます! 先程試してみたのですが、『&H8000』にて起動しようとすると前回と同じくステートメントの最後というコンパイルエラーが発生してしまい、上手く動きませんでした。 値を変更したり、『& H8000』とスペースを入れてみたりもしましたが、値を変更した場合はコンパイルエラーが発生、&の後ろにスペースを入れた場合はエラーは発生しませんでしたが、今と変わらず現在ログインしている情報を引き継いだままIEが起動し、新規セッションでの起動はできませんでした。 他にもなにか対応策はあったりするのでしょうか…? あれば何でも試してみようと思いますので、教えて頂けると嬉しいです。

noname#212058
noname#212058
回答No.1

IE.navigate "http://" を IE.navigate2 "http://" 0x8000 としてみたらどうでしょう。 それでダメなら、以下のページを参考に 0x8000 のところに 指定する値を変えて試してみてください。

参考URL:
http://msdn.microsoft.com/ja-jp/library/aa768360%28v=vs.85%29.aspx
Lily0
質問者

お礼

回答ありがとうございます! 早速指示頂いた通りに変更してみたのですが、コンパイルエラーが発生してしまい、値を変更しても動きませんでした。 他にもなにか対応策があれば教えて頂けると助かります。

関連するQ&A

  • VBAからIE操作でログインできない

    社内の業務管理システムにエクセルVBAでログインしようとしています、が、ログインはもとより、IDを入力する部分に私のID情報すら入力されません。 とりあえずID枠に入力する方法をアドバイスをお願いします。 ◆htmlソース <table> <tr> <td>ID</td> <td><input type="text" name="UserId" id="UserId" /></td> </tr> <tr> <td>PW</td> <td><input type="password" name="UserPass" id="UserPass" /></td> </tr> ◆VBAでは以下のいずれの文も失敗(ID入力枠に何も入らない。エラー発生。) ※右辺のD12セルには私のID情報を入力しています。 ObjIE.Document.all.UserId.Value = Worksheets("MyData").Range("D12").Value ObjIE.Document.all("UserId")(0).Value = Worksheets("MyData").Range("D12").Value ObjIE.Document.all("UserId").Value = Worksheets("MyData").Range("D12").Value ObjIE.document.forms(0).elements("UserId").Value = Worksheets("MyData").Range("D12").Value ObjIE.document.forms(0).elements("UserId")(0).Value = Worksheets("MyData").Range("D12").Value ObjIE.Document.getElementById("UserId").Value = Worksheets("MyData").Range("D12").Value ObjIE.document.all.Item("UserId").Value = Worksheets("MyData").Range("D12").Value 上記コードの何が間違っているのでしょうか? あるいは、上記の原因特定するために、何を試せばよいでしょうか? 宜しくお願いいたします。

  • asp.netでのセッションを使用したログイン

    asp.netでmssql server を利用してログイン機能を実装しました。 以下のようなコードでmssqlに保存してあるIDとパスが一致すれば 以降の画面ではセッションにID、パスが保存され page loadでセッションにID、パスがなかればページがすすんでいけないような設定にしています。 機能は問題なく動作しているのですがこのような仕様はセキュリティ上問題はないのでしょうか。 商用サイトではないのですが、ある程度広域に向けたサイトを構築しようと考えておりまして、セキュリティ向上のため、工夫できるようなことがあればご意見いただきたいです。 よろしくお願いいたします。 ************************************************************** ログインページ ************************************************************** Dim staffid As Integer Dim staffname As String Dim adminflag As Boolean Protected Sub btnLogon_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'ユーザーIDの入力チェック If txtUserID.Text = "" Then lblErr.Text = "ユーザーIDを入力してください。" Return End If 'パスワードの入力チェック If txtpassword.Text = "" Then lblErr.Text = "パスワードを入力してください。" Return End If 'ユーザーとパスワードの検証 If Not CheckUserPassword(txtUserID.Text, txtpassword.Text) Then lblErr.Text = "ユーザーIDまたはパスワードが違います。" Return End If 'セッション変数へ値をセットする Session("StaffID") = staffid Session("StaffName") = staffname Session("AdminFlag") = adminflag End Sub Private Function CheckUserPassword(ByVal userid As String, ByVal password As String) As Boolean Dim ret As Boolean Dim strSQL As String strSQL = "SELECT staffID, staff_name, admin_flag , permission FROM tbl_staff " & _ "WHERE userID = '" & userid.Replace("'", "''") & _ "' AND password = '" & password.Replace("'", "''") & "'" '接続文字列を取得する Dim cnStr As String = System.Configuration.ConfigurationManager.ConnectionStrings("hogehogeConnectionString").ConnectionString() 'コネクションを定義する Using connection As New SqlConnection(cnStr) 'コマンドを定義する Dim command As New SqlCommand(strSQL, connection) 'コネクションを開く connection.Open() Try 'コマンドからデータリーダーを定義する Dim dr As SqlDataReader = command.ExecuteReader 'データリーダーから結果を読み込む If dr.Read Then '対象データが存在する場合 '正しいユーザーIDとパスワードが指定されたので、 'データリーダーから読み出したデータをメンバ変数にセットする staffid = dr("staffID") staffname = dr("staff_name") adminflag = dr("admin_flag") permission = dr("permission") ret = True Else '対象データが存在しない場合 '不正なユーザーIDまたはパスワードが指定された ret = False End If Catch ex As Exception '例外処理(SQLエラーなど) ret = False End Try 'コネクションを閉じる connection.Close() End Using '結果を返して終了する Return ret End Function ************************************************************** ログイン後に行くページでの設定 ************************************************************** Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) '[ユーザーID]ボックスにフォーカスをセットする If Session("StaffID") Is Nothing Then Response.Redirect("~/top.aspx") ElseIf Not Session("AdminFlag") = True Then Response.Redirect("~/top_normal.aspx") End If End Sub

  • IE制御でコピーをしたいのだけれど

    うまくいきません ログイン後の最初のページはコピーすることができるのですが フレームを指定して objDOC.Links(18).Click としてページを進めた先がコピーできません いかに全文を載せます。自分でいろいろやってみたのですが ちょっとわかりません。教えてください! Sub 確認()   Dim objIE As InternetExplorer Dim strUserName, strPassword As String Dim Code, Suryo, Kakaku As Long strUserName = Range("AA1").Value strPassword = Range("AA2").Value Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True   'ログイン画面---------------- objIE.Navigate "https://www2…………   IE_Complete objIE objIE.Document.all.req_userId.Value = strUserName         objIE.Document.all.req_password.Value = strPassword   objIE.Document.all.LoginSubmit.Click IE_Complete objIE 'ログイン画面ここまで Dim objFRAME As FramesCollection    Set objFRAME = objIE.Document.frames    Debug.Print "フレームの数は" & objFRAME.Length    Dim objDOC As HTMLDocument    Set objDOC = objFRAME(0).Document    Set objDOC = objFRAME(0).Document        objDOC.Links(18).Click objIE.ExecWB 17, 0 objIE.ExecWB 12, 0 Sheets("コピー").Select    Cells.Select Selection.Delete Shift:=xlUp  Range("A1").Select  ActiveSheet.PasteSpecial Format:="HTML" objIE.Quit End Sub

  • IEの制御のマクロをつくっていますが

    ログインと作業実行を別々のマクロにしたいのですが マクロでログインを省略して次の画面にもっていきたいので objIE.navigate "https://........... とやると、セキュリティの関係だと思いますが画面がはじかれてしまいます。 ですのでいまはひとつの作業をするのにその都度ログインのマクロからになってしまいます。 何かいい方法がございましたらご教授ください。 Sub ログイン() Dim objIE As InternetExplorer Dim strUserName, strPassword As String strUserName = Range("AA1").Value strPassword = Range("AA2").Value Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "https://mobile.e..............’ログイン画面 IE_Complete objIE '表示終わるまで待つ objIE.Document.All.req_userId.Value = strUserName 'ユーザーネーム objIE.Document.All.req_password.Value = strPassword 'パスワード objIE.Document.All.LoginSubmit.Click 'クリック IE_Complete objIE ここまでログイン 上記を省略して以下からはじめたい Sub 作業実行() objIE.navigate "https://...........

  • VBA IE制御 TABLE取得できません

    以下のコードを使用し、WEBページから「レース検索結果」のテーブルを取得しようとしました。 エラーは出ないのですがコード下から5行目で「OK」のメッセージボックスが 表示されるはずなのですが表示されませんでした。 ローカルウィンドウで確認したところ、summary「レース検索結果」が取得できていませんでした。 WEBページのソースには「レース検索結果」というsummaryは存在しているんですが・・・ どなたかご教授ねがいます OS:Windows 7 Excel:2007 InternetExplorer:11 Sub test() Const strURL As String = "http://db.netkeiba.com/?pid=race_search_detail" Dim objIE As New InternetExplorer Dim objDoc As HTMLDocument Dim objAllInput As Object Dim objInput As HTMLInputButtonElement Dim objAllTable As Object Dim objTable As HTMLTable With objIE .navigate strURL .Visible = True End With Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop Set objDoc = objIE.document Set objAllInput = objDoc.getElementsByTagName("input") For Each objInput In objAllInput If objInput.ID = "check_Jyo_09" Then objInput.Checked = True Exit For End If Next Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop For Each objInput In objAllInput If objInput.Value = "検索" Then objInput.Click Exit For End If Next Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop Application.Wait (Now + TimeValue("00:00:10")) Set objDoc = objIE.document Set objAllTable = objDoc.getElementsByTagName("table") For Each objTable In objAllTable If objTable.Summary = "レース検索結果" Then MsgBox "OK" Exit For End If Next End Sub

  • ログイン時で、php+sessionについて

    普通のページは静的なhtmlなのですが、1ページだけログインページを付けています。 ログイン自体は問題ないのですが、普通のページは静的なhtmlなので、アカウントやパスは普通、データは渡せません。 できるのはphp+session(+javascipt)だけかな?と考えています。 1ページだけログインを付ける為にphpで作成しました。 問題は、html内にphp+sessionを使える方法を知りたいです。 IDやPASSの暗号化は分かっているので、その部分は今回スルーしてます。 変数名も書き方もバカなぐらい簡易化してます。 とにかくデータの渡し方を知りたいです。 ○test.html <form method="post" action="test.php"> <input type="text" name="id" id="id" value=""> <input type="text" name="pw" id="pw" value=""> <input type="submit" value="submit"> </form> ○test.php session_start(); session_name("id"); session_name("pw"); $_SESSION["id"]=$_POST["id"]; $_SESSION["pw"]=$_POST["pw"]; このIDとPASSをどうやったら、test.htmlのフォーム内に自動的に入れられるか、それがわかりません。 やっぱりjavascriptで、SESSIONを取得し、document.getElementByIdのinputか何かを使ってやるのでしょうか? 時間がないのですが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • VBA IEを操作。ファイルダウンロード

    IEを操作して、ファイルをダウンロードしようと思います。 色んなサイトからとってきて、使わせてもらっています。 '---------------------------------IEを開くときに使う Sub IE_OPEN(webUrl As String) Dim objShell Dim writesheet As Worksheet Dim n As Long Dim ID As String, Password As String Set objShell = CreateObject("Shell.Application") Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate2 webUrl Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop Dim objINPUT Set objINPUT = ie.document.getElementsByTagName("INPUT") 'ループで頭からテキストが 次へ を探す For n = 0 To objINPUT.Length - 1 '※ type="submitボタンなので、.InnerTextじゃなくて、.Valueです ※※注意 If InStr(objINPUT(n).Value, "ログイン") > 0 Then '文字列の中から見つけたら Worksheets("Sheet1").Activate Do While ie.Busy Loop objINPUT(n).Click '見つけたINPUTタグのオブジェクトをクリック Do While ie.Busy Loop Exit For End If Next Set objINPUT = Nothing 'オブジェクト変数解放 End Sub '------------------------------IEを開く(この段階では既に開いてあります。) Private Sub CommandButton1_Click() Do While ie.Busy Or ie.readyState <> 4 DoEvents Loop ie.document.all.ah_ehName.Value = Me.ComboBox1.List(Me.ComboBox1.ListIndex) 'ID Do While ie.Busy Loop Dim objINPUT Dim n As Long Set objINPUT = ie.document.getElementsByTagName("INPUT") For n = 0 To objINPUT.Length - 1 If InStr(objINPUT(n).Value, "ダウンロード") > 0 Then objINPUT(n).Click Do While ie.Busy Loop Exit For End If Next Do While ie.Busy = True DoEvents Loop SendKeys "%S", True'保存 Do While ie.Busy = True DoEvents '何もしないループ(笑) Loop SendKeys "%O",True'ファイルを開く? Do While ie.Busy = True DoEvents Loop 'ie.Quit End Sub ’==================- 面倒なので、IEはPublic変数として モジュールに書いています。 (色んなモジュールを経由する必要があるため、このような手段を取りました) SendKeysをIEに送るというのが出来ずに困っています。 ダウンロードというボタンを押してのダウンロードなので、 ダウンロード用のURL等は分かりません。 Excel2003を使っています。 どうにかSendkeysで出来ないでしょうか? もしくは、もう少し分かりやすい方法は無いでしょうか。 (ファイルを保存しますか?のダイアログの「保存」をクリックして  所定の場所におき、開きたい。 そのまま開くのでもいいけれど、動作が不安定になるのは困る) 以上、よろしくお願い致します。

  • VBAで起動しているIEの操作

    IEでOKWAVEを開いていたら イミディエイトウィンドウに タイトルを表示するのに 次の 記述をしましたが エラーになりました。 実行時エラー '-2147467259 (80004005)': 'Document' メソッドは失敗しました: 'IWebBrowser2' オブジェクト なぜでしょうか? IEは11です。 エクセルは2013 OSは windows7 ホームプレミアム vbsは次の通り Sub okwave() Dim colSh As Object Dim win As Object Dim strTemp As String Dim objIE As Object Set colSh = CreateObject("Shell.Application") For Each win In colSh.Windows If TypeName(win.document) = "HTMLDocument" Then If InStr(win.document.Title, "okwave") > 0 Then Set objIE = win Exit For End If End If Next Debug.Print objIE.document.Title End Sub

  • ログイン後他のページへ移動して表示保存

    Aというサイトに自動でログイン後に、他のページ(同サイト内)を表示してhtmlで保存する場合どのように変更すればいいのでしょうか?(今は自動ログイン後https://www.aaaaaaa.comのhtmlをexcel上に表示していますがこれをhttps://www.aaaaaaa.com/bbに移動させ表示してhtmlで保存したい) 教えて頂けませんでしょうか?よろしくお願いします。 XP/Excel2003 Sub test() Dim objIE As Object Dim URL01 As String Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True URL01 = "https://www.aaaaaaa.com" ID01 = "△△△△△△△" PASS = "○○○○○○○" objIE.Navigate URL01 Call wait_open(objIE) 'form.id部分はサイトのソースに合わせる objIE.document.all.ID.Value = ID01 'form.password部分はサイトのソースに合わせる objIE.document.all.PASS.Value = PASS Call wait_open(objIE) 'form部分はサイトのソースに合わせる objIE.document.LOGIN.submit Call wait_open(objIE) Sheets("Sheet1").Range("A1").Value = objIE.document.body.innerHTML End Sub Sub wait_open(objIE) Do While objIE.Busy Loop Do While objIE.document.ReadyState <> "complete" Loop End Sub

  • セッション

    セッションについて教えて下さい。 指定のID、パスワードでログインしようと思っています。 ソースを記載しますので、お教え下さい。 ID:aaa パスワード:111とします。 [送り側フォーム] <form action="/test2.asp" method="POST" id=form1 name=form1> <input type="text" name="id" value=""><br> <input type="password" name="passwd" value=""> <input type="submit" value="LOGIN" id=submit1 name=submit1> </form> とし、 [受け取り側、認証 test2.asp ] <% If Session("user_test") <> "1" Then Response.Redirect "/test.asp" Response.End() End If %>ここで認証を判断し、認証できなければtest.aspへもどるとし、 Dim id, passwd id = Request.Form("id") passwd = Request.Form("passwd") Session("user_login") = "id" Session("user_login") = "passwd" IF id = "aaa" and passwd = "111" THEN Session("user_test") = 1 Response.Write ("OK") ELSE Response.Write ("ちがうよ") END IF %> ID、パスワードをセッション変数にいれ、各ページで認証すると言う事をやりたいのですが、うまくいきません。 どこがわるいか、お教え下さい。 ※以前にも似たような質問をしているのですが、改善されずお手上げです。

専門家に質問してみよう