VBAで二つのタブを開き、別タブに操作する方法

このQ&Aのポイント
  • VBAを使用して、二つのタブを開いて別タブに対して操作する方法について教えてください。
  • 例えば、VBAのie操作を使用して、最初のタブでGmailを開き、次のタブでDocomoメールを開く場合、どのようにすれば良いでしょうか?
  • また、DocomoメールにはVBAでPWを入力する必要がありますが、どのように入力すれば良いでしょうか?
回答を見る
  • ベストアンサー

二つのタブを開き、二つ目のタブに対して、操作し

vbaのie操作で 一つ目はタブはグーグルメール 二つ目のタブはドコモメールを開きたいのですが、 ドコモメールはPWをVBAで入れないと進めないので入れたいのですが Sub test() Dim myObj As Object Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") With objIE .Visible = True .Navigate "https://mail.google.com/mail/u/0/?pli=1#inbox" ’グーグル End With objIE.Navigate2 "https://mail.smt.docomo.ne.jp/mail/#fid=10000000&page=1", 2048 ’ドコモ For Each myObj In objIE.document.all.tags("input") If myObj.ID = "persistent" Then myObj.Value = "PW" Exit For End If Next Set objIE = Nothing End Sub だと、 For Each myObj In objIE.document.all.tags("input") は、グーグルメールを参照しています。 LocationURLを見てみたら、 "https://mail.google.com/mail/u/0/#inbox" になっていました。 このように、二つのタブを開き、二つ目のタブに対して、操作したい場合 どうすればいいでしょうか?

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

  • ベストアンサー
回答No.2

こんにちは。 ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ' ' 参照設定 ■ Microsoft Internet Controls ■ SHDocVw Sub ReW9095183() Const navOpenInNewTab = 2048 Dim myObj As Object Dim objIE As InternetExplorer Dim objIE2 As InternetExplorer Dim objShell As Object ' As Shell32.Shell ' ■ Microsoft Shell Controls And Automation ■ Shell32 Dim cnWnd As Long ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー   Const GOOGLE = "https://mail.google.com/mail/u/0/?pli=1#inbox"   Const DOCOMO = "https://mail.smt.docomo.ne.jp/mail/#fid=10000000&page=1" ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ' ' objShell.Windows で 逐一 エクスプローラ を捉える為のShell オブジェクト   Set objShell = CreateObject("Shell.Application") '  Set objShell = New Shell32.Shell ' ' objShell.Windows.Count = エクスプローラ(Windows+Internet)の数、現在値   cnWnd = objShell.Windows.Count ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー   Set objIE = CreateObject("InternetExplorer.Application")   With objIE     .Visible = True     .Navigate GOOGLE  ' グーグル     .Navigate2 DOCOMO, navOpenInNewTab ' navOpenInNewTab = 2048 ' ドコモ   End With ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ' ' objShell.Windows.Count で 追加タブの エクスプローラ が読み込まれるまで待機   Do While objShell.Windows.Count < cnWnd + 2     DoEvents   Loop ' ' objShell.Windows の 最後にあるのが 追加タブの エクスプローラ   Set objIE2 = objShell.Windows(cnWnd + 1) ' ドコモ ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー   With objIE  ' グーグル     Do While .Busy Or .ReadyState <> READYSTATE_COMPLETE '  READYSTATE_COMPLETE = 4       DoEvents     Loop   ' ' グーグル 処理 ?   End With ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー   With objIE2 ' ドコモ     Do While .Busy Or .ReadyState <> READYSTATE_COMPLETE       DoEvents     Loop   ' ' ドコモ 処理 '    .Document.getElementById("Di_Uid").Value = "ID" ' ? 必要ならイキ アカウントID要指定     .Document.getElementById("Di_Pass").Value = "PassWord" ' ? パスワード要指定 '    .Visible = False '    .Document.getElementsByClassName("button_submit nextaction")(0).Click ' ? ログインするならイキ '    .Visible = true   End With ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー '  objIE2.Quit:  objIE.Quit ' ? 必要ならイキ   Set objIE = Nothing:  Set objIE2 = Nothing End Sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

参考URL:
http://okwave.jp/qa/q8939992.html
QBMDUVSIZECSE
質問者

お礼

回答ありがとうございました。

その他の回答 (1)

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

Shell.Application を使って、IEのタブを列挙&操作できるみたいです。

参考URL:
http://vba-code.net/ie/open-link-in-new-tab/
QBMDUVSIZECSE
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • objIE.Navigate2 "http://.

    win8.1 エクセル2010です。 1ページ目でyahooのソースをチェックし、 2ページ目でグーグルのソースをチェックするにはどうすればいいでしょうか? **************************************************************** Option Explicit Dim objIE As InternetExplorer Sub test() Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") With objIE .Visible = True .navigate "http://www.htmllint.net/html-lint/htmllint.html" End With Call wait For Each myObj In objIE.document.all.tags("input") If myObj.Name = "URL" Then myObj.Value = "http://www.yahoo.co.jp/" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.alt = "CHECK" Then myObj.Click Exit For End If Next Call wait '表示が終わってないのに次のコードに進んでるっぽい objIE.Navigate2 "http://www.htmllint.net/html-lint/htmllint.html", 2048 For Each myObj In objIE.document.all.tags("input") If myObj.Name = "URL" Then myObj.Value = "https://www.google.co.jp/" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.alt = "CHECK" Then myObj.Click Exit For End If Next End Sub Sub wait() Do While objIE.Busy = True DoEvents Loop Do While objIE.readyState <> 4 DoEvents Loop End Sub **************************************************************** というコードを作ったのですが、 1ページ目のタブで、ヤフーのコードをチェックし、 2ページ目のタブで http://www.htmllint.net/html-lint/htmllint.html は表示できたのですが、 2ページ目のタブのボックスに myObj.Value = "https://www.google.co.jp/" を入れることができません。 しかし 上記のコードを実行してもエラーにはなりません。 2回目の For Each myObj In objIE.document.all.tags("input")は 何をループしているのかよくわかりません。 objIE.Navigate2 "http://www.htmllint.net/html-lint/htmllint.html", 2048 で開いた二つ目のタブで For Each myObj In objIE.document.all.tags("input") If myObj.Name = "URL" Then myObj.Value = "https://www.google.co.jp/" Exit For End If Next をやる方法を教えてください。

  • 食べログに価格ドットコムのIDでログインしたい

    食べログにvbaを使ってログインしたいのですが、 どうしてもログインボタンを押せません。 クリックできない状態です。 Enabledプロパティと同じような状態です。 Dim objIE As InternetExplorer Sub Sample1() Dim SiteName As String Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://ssl.tabelog.com/account/kakakuid_entry/" With objIE.document .all("mail_address").Value = "test" .all("password").Value = "test" End With For Each myObj In objIE.document.all.tags("input") If myObj.alt = "ログイン" Then myObj.Click Exit For End If Next Set objIE = Nothing End Sub こうしても、なぜかログインボタンが選択状態になりません。 手動でIDとPWを入力すると、ボタンが青くなり、押せるようになりますが VBAで情報を入力すると、選択不可状態のままです。 これが原因で、vbaでログインボタンがクリックできないのでしょうか?

  • objIE.Document.all.tags("

    Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://oshiete.goo.ne.jp/" objIE.Visible = True Call IE_wait(objIE) objIE.Document.forms("center_searchform").elements("MT").Value = "教えて" For Each myObj In objIE.Document.all.tags("input") If myObj.alt = "検索する" Then objIE.Document.all.tags("input").alt("検索する").Click ‘ココでエラー End If Next Set objIE = Nothing End Sub これを実行するとクリックできないのですがなぜでしょうか? オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) が表示されます。 他の方法で解決する事は出来ますが、 If myObj.alt = "検索する" Then が出来てるからこのままうまく行きそうな気がするのですが? 理由を教えてください。ご回答よろしくお願いします。

  • 検索ボタン押下時に、検索ボックスに入れた値が消える

    ie操作ですが、 検索ボックスに文字を入れて、検索ボタンを押すことは出来たのですが 検索ボタン押下時に、検索ボックスに入れた値が消えてしまい、結局何も検索ボックスに入れてない状態で検索されてしまいます。 検索ボックスに値を入れても文字の色が灰色です。 手作業で検索ボックスに文字を入れると黒で表示されます。 コードはこちらです。 Sub ヒトサラ() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://hitosara.com/" Do While objIE.Busy = True DoEvents Loop For Each myObj In objIE.Document.all.tags("input") If myObj.Name = "keyword" Then myObj.Value = "検索文字" Exit For End If Next For Each myObj In objIE.Document.all.tags("input") If myObj.alt = "検索" Then myObj.Click Exit For End If Next End Sub myObj.Value = "検索文字" これが間違ってる気がするのですが どのように修正すればよいでしょうか?

  • IE操作 ソース内のjavascriptを表示後、

    VBAでIE操作をしているのですが、 javascriptのURLを踏んだ後に、そのページをオブジェクトに格納して値の取得等をしたいのですが、 うまくいきません。 For Each myObj In objIE.document.all.tags("a") If myObj.href Like "*affiliateUrl1*" Then objIE.navigate myObj.href ' Call IE_wait Exit For End If Next 上記のコードで、 javascript:show_rakuten_linkcd('linkUrl1','imageUrl_S1','imageUrl_M1','title1','price1','reviewCount1','affiliateUrl1'); を見つけて、objIE.navigate myObj.href で、ページを表示することは出来たのですが、 Call IE_wait で Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub をすると、無限ループに入ります。 javascriptでページを表示させても、 objIEに格納されているURLは、javascriptを踏む前の元のページだからと思います。 なので、表示されるまで待つのは手動でやるとしたのですが、 その後、 For Each myObj In objIE.document.all.tags("testarea") If myObj.Name = "code" Then      ’ソース取得 End If Next とやろうとしても、objIEに格納されているURLがjavascriptで表示させているページでない為、 取得できません。 objIE.navigate myObj.href を実行した後に、javascriptのページ(小窓)を格納する方法があれば教えてください。 よろしくお願いします。

  • vba ie操作 ボタンを押したい

    こんばんは。度々すいません。 またまたIE操作で詰んでしまいました。 以前、http://hiroba.chintai.net/qa7798169.htmlで質問してご回答いただいたのですが 違うサイトにも応用しようとしたところ、うまくいきませんでした。 https://www.jaccs.co.jp/icmclub/icm_login.htmlのログインボタンを押下したいのですが Sub test() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate "https://www.jaccs.co.jp/icmclub/icm_login.html" objIE.Visible = True Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then Debug.Print myObj.alt myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub をするとエラーにもならないけどボタンも押せません。 でもmyObj.Clickは通過しているようです。 なぜボタンを押せないのでしょうか? ご教授よろしくお願いします。

  • 二つ目のタブを閉じたい

    http://hiroba.chintai.net/qa7823804.html こちらでも質問したものです。 xls88さまに教えていただいて、 Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "http://www.yahoo.co.jp/" objIE.Navigate2 "http://www.goo.ne.jp/", 2048 objIE.Navigate2 "http://www.google.co.jp/", 2048 objIE.Quit Set objIE = Nothing End Sub で、複数のタブを開くことができたのですが、 http://www.goo.ne.jp/のタブだけを閉じたい場合はどうすればいいでしょうか? 上記のコードを実行すると、http://www.yahoo.co.jp/が閉じてしまいます。 ご回答よろしくお願いします。

  • vba ie操作 検索後のタイトルが取得できない

    vba ie操作 ヤフーファイナンス 検索後のタイトルが取得できない win8、エクセル2010です。 ヤフーファイナンスで会社名を検索して、その後のコードを取得したいのですが その場合、タイトルに企業コードがあるので、その文字を取得しようとしたら、 検索前のページが取得されてしまいます。 ------------------------------------------------------------ Dim objIE As New InternetExplorer Sub test() Dim str企業名 As String Dim myObj As Object str企業名 = "ホテルオークラ" Set objIE = CreateObject("InternetExplorer.application") With objIE .navigate "http://finance.yahoo.co.jp/" .Top = 0 .Left = 0 .Width = 1000 .Visible = True End With Call IE_wait For Each myObj In objIE.document.all.tags("input") If myObj.ID = "searchText" Then myObj.Value = str企業名 Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.ID = "searchButton" Then myObj.Click Call IE_wait Exit For End If Next Debug.Print objIE.document.Title Set objIE = Nothing End Sub ----------------------- Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub ------------------------------------------------------------ というコードなのですが 検索語の2ページ目は 「(株)京都ホテル【9723】:株式-株価 - Yahoo!ファイナンス」 というタイトルなのに 1ページ目と同じ 「Yahoo!ファイナンス - 株価やニュース、企業情報などを配信する投資・マネーの総合サイト」 が返ります。 なぜ次のページのタイトルが取得できないのでしょうか? 画面上IEブラウザには2ページ目が表示されています。

  • vbaでnanacoにログイン(ie操作)

    私は「緑のパスワードがなくnanacoをお持ちの方」です。 カード記載の番号にはvbaで値を入れることはできるのですが、 nanaco番号に値を入れることとログインボタンを押すことができません。 ********************************************** Sub nanaco() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://www.nanaco-net.jp/pc/emServlet" Do While objIE.Busy = True DoEvents Loop Do While objIE.document.readyState <> "complete" DoEvents Loop objIE.document.all("XCID").Value = "12345" objIE.document.all("SECURITY_CD").Value = "Password" For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub ********************************************** これだとまずall("XCID").Value でエラーになります。 ソースでは、 <input name="XCID" tabIndex="1" class="txtBoxLogin" accessKey="1" type="text" maxLength="16" value=""/> となっておりますが、同じコードが二つあるからエラーになるのでしょうか? all("SECURITY_CD").Value は問題なくできます。 ソースにも、SECURITY_CDは一つしかないです。 次にログインボタンも二つあるのですが、 For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next このコードを実行すると、多分上の方のログインボタンが押されてるようです。 なので、 Dim 二つ目 As Boolean For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then If 二つ目 = True Then myObj.Click Exit For End If 二つ目 = True End If End If Next に変更してみたのですが、 どうやら If myObj.alt = "ログイン" Then になるのは、1回しかないようです。 うーん、うまくできません。 ご教授よろしくお願いします。

  • vbaでdcmxにログインしたいのですが、

    https://cfg.smt.docomo.ne.jp/auth/cgi/anidlogin?rl=https%3A%2F%2Fi.mydocomo.com%2Foid%2Flg%2Flogin%3Fmode%3Dlogin%26return_to%3Dhttps%253A%252F%252Fwww1.dcmx.jp%252Fsdys%252Fsp%252Fopenid%252Fopenid_entry_input.do%26user_check%3D54cad3f373419a99d7830f9af7d22273c953e635c3a362c39338ab841078b1134f2dcd5104b0c9233fd98caf2ece0ca70000000000000000&si=0001&authif=1 のページなのですが ******************************************************* Dim myObj As Object Dim objIE As InternetExplorer Sub DCMX() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "https://cfg.smt.docomo.ne.jp/auth/cgi/anidlogin?rl=https%3A%2F%2Fi.mydocomo.com%2Foid%2Flg%2Flogin%3Fmode%3Dlogin%26return_to%3Dhttps%253A%252F%252Fwww1.dcmx.jp%252Fsdys%252Fsp%252Fopenid%252Fopenid_entry_input.do%26user_check%3D77016eccfd48449791dc76443259e46c30e0f39f25bc31902f48550e56b1176f73ec037e4b531368a8587aa1b5208c7d0000000000000000&si=0001&authif=1" Call IE_wait For Each myObj In objIE.document.all.tags("input") If myObj.Name = "authid" Then myObj.Value = "あああ@yahoo.co.jp" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.Name = "authpass" Then myObj.Value = "あああ" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.Name = "subForm" Then myObj.Click Exit For End If Next End Sub Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub ******************************************************* でログインボタンを押下でき、VBAではエラーにはならないのですが、 次のページで ******************************************************* エラー 大変申し訳ございません。 お探しのページまたはファイルが見つかりませんでした。(IN-E-1001) ******************************************************* となってしまいます。 DCMXではなく、 objIE.navigate "https://id.smt.docomo.ne.jp/cgi7/id/menu" のdアカウントなら問題なく次のページも表示されます。 なぜDCMXはエラーになってしまうのでしょうか?

専門家に質問してみよう