VBAからIEを動かしてタブをクリックする方法

このQ&Aのポイント
  • VBAからIEを操作して特定のタブをクリックする方法について困っています。ソースコードと具体的な問題点を説明します。
  • 具体的な問題点は、タブを押すことができないということです。タブをクリックするためのソースコードを記載しています。
  • さらに、タブをクリックする後の作業についてもアドバイスをいただきたいです。
回答を見る
  • ベストアンサー

VBAからIEを動かしてタブをクリックする方法

すいません、ここ10日間くらい悩んでいます。 VBAからIEを動かして所定の場所にログインをした後以降の作業でつまづいています。ソースコードを記載しております。その後のタブをクリックする以降の作業を以下に記載いたしました。 ⇒どうしてもタブが押せません。 ーーーーーーーーーーーーーーーーー Sub ***() Dim objIE As InternetExplorer 'IEオブジェクトを準備 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = True 'IEを表示 Dim strURL As String '次ページのURL strURL = "https://*****" objIE.navigate strURL 'IEでURLを開く Application.Wait [Now()+"00:00:03"] SendKeys "{Tab}" SendKeys "{Tab}" SendKeys "{Tab}" SendKeys "{Tab}" SendKeys "{Tab}" SendKeys "{Tab}" SendKeys "{Tab}" SendKeys "{Tab}" SendKeys "***"   ’IDの入力 SendKeys "{Tab}" SendKeys "***"   ’パスワードの入力 SendKeys "{Tab}" SendKeys "{Enter}"   ’ENTERの入力 Application.Wait [Now()+"00:00:05"] Dim objA As Object Dim i As Integer 'For Each objA In objIE.document.all.tags("a") 'Set objA = objIE.document.all.tags("a") 'Set objA = objIE.document.all.outerHTML Set objA = objIE.document.getElementsByTagName("a") 'If objA.outerHTML = "ドキュメント" Then Then '押したいタブの名称 objA.Click End If Next 'ここから先はまだ考えていない End Sub ーーーーーーーーーーーーーーー 1.Javascriptの以下のような"javascript:void(null);"のタブの部分のを自動化でクリックしたい。 ここが上記のドキュメントの部分。 <a href="javascript:void(null);" onclick="return !1;" class="TabTitle" role="tab" title="ドキュメント" style="width: auto;">ドキュメント</a> 2.以下の”ZGBL_DLV_SOM_RP0442_SLS_ORD”のハイパーリンクをクリックする。 ここ以降はまだ考えていない。 <div id="ListingURE_detailView_listColumn_1_0_1" style="overflow: hidden; padding: 2px 0px 2px 4px;">ZGBL_DLV_SOM_RP0442_SLS_ORD</div> 3.以下の”Enter Value(s) for Sales Order Creation Date”をクリックする。 <span>* Enter Value(s) for Sales Order Creation Date (From):</span> 4.小さな小窓をクリックする。 <div id="IconImg_calendar_promptLovZone_RightZone_oneTextField_date0" class="imo" style="width: 15px; height: 20px; background-image: url(&quot;https://btblc-prdbobi.jnj.com/BOE/portal/1610160145/AnalyticalReporting/webiDHTML/viewer/../dhtmllib/images/skin_standard/menuelements.png"); background-position: 0px -130px; margin-top: 0px; cursor: pointer;"></div> 5.以下のソースコードで今日というボタンをクリックしたい。 <nobr id="Btn_iconMenu_menu_calendar_promptLovZone_RightZone_oneTextField_date0_t" class="wizbutton">今日</nobr> 6.OKをクリックする。 <td width="64" id="BtnCImg_OK_BTN_promptsDlg" align="center" class="btnBase btnMidBase btnMFocus"><button style="overflow: visible; cursor: pointer;" class="wizbuttoninner" id="RealBtn_OK_BTN_promptsDlg" title="OK"><nobr id="Btn_OK_BTN_promptsDlg" class="wizbutton" title="O 仕事で使うので困っております。どうにかお礼をできればしたいとも思います。 何卒宜しくお願いします。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (715/1481)
回答No.3

私の経験では、IEはなぜか、起動直後はSendKeysを受け入れてくれません。 一度、IEの何もないところをクリックする 又は、Navigateを2回行う、で解決しました。 Navigate2回は時間がかかるので、IEの何もないところをクリックするのがいいと思います。そのためには、IEを左上(好きな場所でいいが、左上が一番楽)に固定する必要があります。 気になるのか、3秒止めていることです。やはり、BusyとRadeyState を見て止めないとうまく行かないと思います。 それと、SendKeysはTrueにした方がいいです。 当然下のプログラムはテストをしていません。 サブルーチンは私が使っているものを流用しました。Esc で止まるようにしてあります。 SleepStop は1 で0.1 秒止まります。 ' マウス操作 Declare Function SetCursorPos Lib "user32" ( _   ByVal x As Long, _   ByVal y As Long) As Long Declare Sub mouse_event Lib "user32" ( _   ByVal dwFlags As Long, ByVal dx As Long, _   ByVal dy As Long, ByVal cButtons As Long, _   ByVal dwExtraInfo As Long) Const MOUSEEVENTF_LEFTDOWN As Integer = &H2   '左ボタンDown Const MOUSEEVENTF_LEFTUP As Integer = &H4    '左ボタンUP Const MOUSEEVENTF_RIGHTDOWN As Integer = &H8  '右ボタンDown Const MOUSEEVENTF_RIGHTUP As Integer = &H10   '右ボタンUP ' キー入力 Declare Function GetAsyncKeyState Lib "USER32.DLL" ( _   ByVal vKey As Long) As Long ' 一時停止 Declare Sub Sleep Lib "kernel32.dll" ( _   ByVal vKey As Long) ' Sub ***() '   Dim objIE As InternetExplorer 'IEオブジェクトを準備   Dim strURL As String '次ページのURL '   Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット   objIE.Visible = True 'IEを表示   objIE.Top = 0   objIE.Left = -7   strURL = "https://*****"   objIE.navigate strURL 'IEでURLを開く   BusyWait objIE   SleepStop 10   SetCursorPos 1, 121     '何もにないところ   mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0   mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ’   SendKeys "{Tab 8}", True   SendKeys "***", True   'IDの入力   SendKeys "{Tab}", True   SendKeys "***", True   'パスワードの入力   SendKeys "{Tab}", True   SendKeys "{Enter}", True   'ENTERの入力   BusyWait objIE   SleepStop 10     ︙ End Sub ' Sub BusyWait(IE As Object) '   While IE.Busy Or IE.ReadyState < 4     SleepStop 1   Wend End Sub ' Sub SleepStop(vKey) '   For i1 = 1 To vKey     DoEvents '     If GetAsyncKeyState(27) <> 0 Then       Stop     End If     Sleep 100   Next i1 End Sub しかし、Sendkeysは失敗する可能性が高いコマンドです。   Set objA = objIE.document.getElementsByTagName("input")   objA(7).Value = "***"   'IDの入力   objA(8).Value = "***"   'パスワードの入力   objA(9).Click という形にできませんか。私はこうしています。 (Type=File になっている項目はSendKeysを使わないと入力できませんが) (7)(8)(9) は想像です。実際は、ホームページを見なければ判りません。   For Each objA in objIE.document.getElementsByTagName("input")     Debug.Print No, objA.Name, objA.Type     No = No + 1   Next objA のようなプログラムで、input エリアの情報が得られます。 "input" は"textarea"かもしれません。両方調べてください。 関係ないことですが、 .Document.getElementsByTagName("a") .Document.Links は同じです。私は短いので下の方を使っています。 そのような仕事をしているのは羨ましいです。 どうすればそのような仕事に就けるのですが?(私は現在無職です)

その他の回答 (2)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

VBAは初歩程度で、的外れの回答ならゴメン。 テーブルのフィールドのデータ型をハイパーリングにしてここへURLを登録する方法はダメですか

回答No.1

サイトのURLを提示しないと回答のしようが無いと思いますよ。 また、どのタブなのか、画像で指し示すなどされたらいかがですか?

masa582
質問者

お礼

すいません、会社の専用線を使用していましてさらに企業秘密からURLを提示することができませんでした。アドバイスありがとうございます!

関連するQ&A

  • 表示中のタブに色を付けたい

    タブ1111~5555は青色表示されていますが 選択中には常に赤色表示させておきたいのですがどうすれば良いのでしょうか。 ご教授ください <html> <head> <script type="text/javascript"> function ChangeTab(tabname) { // 全部消す document.getElementById('tab1').style.display = 'none'; document.getElementById('tab2').style.display = 'none'; document.getElementById('tab3').style.display = 'none'; document.getElementById('tab4').style.display = 'none'; document.getElementById('tab5').style.display = 'none'; // 指定箇所のみ表示 document.getElementById(tabname).style.display = 'block'; } // --></script> </head> <body> <a href="#tab1" class="tab1" onclick="ChangeTab('tab1'); return false;">1111</a> <a href="#tab2" class="tab2" onclick="ChangeTab('tab2'); return false;">2222</a> <a href="#tab3" class="tab3" onclick="ChangeTab('tab3'); return false;">3333</a> <a href="#tab4" class="tab4" onclick="ChangeTab('tab4'); return false;">4444</a> <a href="#tab5" class="tab5" onclick="ChangeTab('tab5'); return false;">5555</a> <div id="tab1" class="tab"> <div class="information-newwarp">aaaa</div> </div> <div id="tab2" class="tab"> <div class="information-newwarp">bbbb</div> </div> <div id="tab3" class="tab"> <div class="information-newwarp">cccc</div> </div> <div id="tab4" class="tab"> <div class="information-newwarp">dddd</div> </div> <div id="tab5" class="tab"> <div class="information-newwarp">eeee</div> </div> <script type="text/javascript"><!-- // デフォルトのタブを選択 ChangeTab('tab1'); // --></script><!--■タブページデフォルト設定js--> </body> </html>

  • htmlの中のhtmlをタブで切り替え

    いつもありがとうございます。 ホームページのトップページで タブを使って切り替わるjavascriptを 使っているのですが、 現在だとhtmlファイルの上にhtmlファイルを 貼り付けているような感じになって タブの中身の編集しようとしたり、その他の 部分を編集しようとするときに見づらいし 不具合もでてきています。 イメージ的には四角形の横にタブが3つ並んで、 Aのタブをクリックすると四角の中がA.html Bのタブをクリックすると四角の中がB.html Cのタブをクリックすると四角の中がC.html のようにできないものでしょうか? ちなみにA~CのHTMLは頻繁ではないですが更新します。 現在は <script type="text/javascript"><!-- function ChangeTab(tabname) { // 全部消す document.getElementById('tab1').style.display = 'none'; document.getElementById('tab2').style.display = 'none'; document.getElementById('tab3').style.display = 'none'; // 指定箇所のみ表示 document.getElementById(tabname).style.display = 'block'; } // --></script> のようなスクリプトを使って <div style="position:absolute;top:216px;left:150px;width:20px;height:100px;"><a href="#tab3" class="tab3" onclick="ChangeTab('tab3'); return false;"><img src="*****.gif" alt="" height="103" width="20" border="0"></a></div> <div style="position:absolute;top:108px;left:150px;width:20px;height:100px;"><a href="#tab2" class="tab2" onclick="ChangeTab('tab2'); return false;"><img src="*****.gif" alt="" height="103" width="20" border="0"></a></div> <div style="position:absolute;top:0px;left:150px;width:20px;height:100px;"><a href="#tab1" class="tab1" onclick="ChangeTab('tab1'); return false;"><img src="*****.gif" alt="" height="103" width="20" border="0"></a></div> <script type="text/javascript"><!-- // デフォルトのタブを選択 ChangeTab('tab1'); // --></script></div> のような感じで貼り付けています。 別の方法で編集画面などですっきりまとめる方法は ないでしょうか? 不備な点もあるかと思いますけど、 どうぞよろしくお願いいたします。

  • jQuery クリックした後の動き

    ボタン(#btn)をクリックすると、#navWarpを右に200px 移動するところまでは出来ましたが、2度目のクリックで元の位置まで 戻すにはどのような方法があるのでしょうか。 宜しくお願いします。 ■jquery $(function(){ $("#btn").click(function(){ $("#navWarp").stop().animate({"left":"200px"},500); }); }); ■css #navWarp{ position:relative; margin:0 0 0 -200px; } #btn{ position:absolute; top:0; left:200px; cursor: pointer; } ■html <div id="navWarp"> <div id="btn"></div> </div>

  • JavaScriptでIE上のボタンクリック

    JavaScriptの初心者でIE上で表示されたボタンをクリックしたいのですが、2つのボタンのうち1つをクリックしたいです。 「document.all("Buttonok").click();」,「document.getElementById("Buttonok").click();」と記入してみたのですが、エラーとなります。 下記のようなボタンをJavaScriptで押すにはどうしたらいいのでしょうか? どなたかすいませんがご教授ください。 ===================================================== ボタンのHTML ※formで囲まれてないです。 <table border="0" cellspacing="0" cellpadding="0" width="150"> <tr> <td width="50%"> <div id="Button"> <input type="buttonok" value="OK" class="Button" onclick="onClk("1");" /> </div> <div id="Button"> <input type="buttonng" value="NG" class="Button" onclick="onClk("0");" /> </div> </td> </tr> </table>

  • IEのレイアウト崩れについて 助けてください

    いつもお世話になっております。 実はブログを作成していて一部、IEのみ配置が違っている部分(検索フォーム部分のみ)がございました。 どのようにCSSを変更しても他ブラウザのように表示されず困っております。 そこでIEハックをして修正しようと思いました。 IE11でのハック方法が分からず、どなたかご教示頂けませんでしょうか。 また、CSSなど修正可能な方がいらっしゃいましたら助言頂けると嬉しいです。 【HTML】 <!-- コンテンツ部分 --> <div id="contents"> <a href="#" title="トップページ"><div class="btn">Home</div></a> <a href="#" title="当サイトについて"><div class="btn">about</div></a> <a href="#" title="写真・画像置き場"><div class="btn">Photo</div></a> <a href="#" title="ツイッター - Twitter -"><div class="btn">Twitter</div></a> <a href="#" title="お問い合わせ"><div class="btn">Mail</div></a> <!-- 検索フォーム --> <div class="search" align="right"> <form action="./" method="get" >サイト内検索 <input class="search_input" type="text" name="q" maxlength="200" value="<%search_word>"> <input class="search_btn" type="image" src="pngファイル(15px*14px)"> </form> </div> </div> 【CSS】 /***** ボタン部分 *****/ #contents{ width: 1200px; height: 35px; margin-bottom: 25px; } .btn{ float: left; width: 100px; height: 33px; padding-left: 20px; padding-right: 20px; border: 1px solid #15aeec; background-color: #49c0f0; background-image: -webkit-linear-gradient(top, #49c0f0, #2cafe3); background-image: linear-gradient(to bottom, #49c0f0, #2cafe3); color: #fff; -webkit-transition: none; transition: none; text-shadow: 0 1px 1px rgba(0, 0, 0, .3); line-height: 33px; } /* マウスオーバー */ .btn:hover{ border:1px solid #1090c3; background-color: #1ab0ec; background-image: -webkit-linear-gradient(top, #1ab0ec, #1a92c2); background-image: linear-gradient(to bottom, #1ab0ec, #1a92c2); } /* クリック */ .btn:active { background: #1a92c2; box-shadow: inset 0 3px 5px rgba(0, 0, 0, .2); color: #1679a1; text-shadow: 0 1px 1px rgba(255, 255, 255, .5); } /***** 検索部分 *****/ .search{ /*float: left;*/ height: 33px; margin-left: auto; border: 1px solid #15aeec; background-color: #49c0f0; color: #fff; -webkit-transition: none; transition: none; text-shadow: 0 1px 1px rgba(0, 0, 0, .3); line-height: 33px; } .search_input{ width: 220px; padding: 5px 35px 5px 6px; border:1px solid #333; } /* 可能であれば:root .search_btnを共通で使用したいです */ :root .search_btn{ position: relative; top: 3px; left:-30px; } /* まだIE10の配置修正はしていません */ @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { .search_btn{ position: relative; top: 0px; left:-30px; } } 動きを確認したところ .search_inputのheightをデフォルトより広くとるとIEのレイアウトのみ崩れるようになりました。 何卒、ご返事よろしくお願い致します。

    • ベストアンサー
    • CSS
  • IE操作で次ページを別タブに表示するには?

    VB.NET(VB 2010 Express)でIE(Ver.9)をWebBrowserコントロールではなく直接操作しています。 下記のコードのように、あるサイトのトップページを表示し、それにユーザID、パスワードを入力し、ログオンボタンをクリックして次のページを表示します。 次のページはトップページと同じタブに表示されますが、これを別タブに表示するにはどうすればよいのでしょうか?ご教示頂きたくよろしくお願い致します。 objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate("https://xxxxxxx.co.jp")    '表示ページのソース読込み完了を待つ(略) objIE.Document.all("ACCOUNT").Value = "yyyyyy" 'ユーザIDを入力 objIE.Document.all("PASSWD").Value = "zzzzz"   'パスワードを入力 objIE.Document.all("btn").Click()              'ログインボタンをクリック     '以下表示した次ページのソースを処理

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

    https://ca.omc-card.co.jp/member/omcplus_login.html のサイトにログインしたいのですが、ログインボタンが押せません。 ソースは、 ********************************************************************************** <FORM action="../member/xt_mem_top_login.asp" method="post" name="form1"><input type="hidden" name="sid" value=""><input type="hidden" name="pw" value="">     ~~~省略~~~ <TABLE border="0" cellspacing="0" cellpadding="5" class="tab_button_bottom15"> <TR> <TD><A href="javascript:checkInput(document.form1);"><IMG src="../img/button/login.gif" alt="ログイン" width="160" height="35" border="0"></A></TD> </TR> </TABLE> </FORM> ********************************************************************************** です。 --------------------------------------------------------------------------------- Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://ca.omc-card.co.jp/member/omcplus_login.html" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.forms(0).Item("sid_input").Value = "×××" objIE.Document.forms(0).Item("pw_input").Value = "×××" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop 'objIE.Document.forms(1).submit 'エラーになる objIE.Document.all.Item("document.form1").Click 'エラーになる objIE.Document.forms(0).getElementsByTagName("input")(0).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("input")(1).Click 'エラーにならないけどクリックもされない。 objIE.Document.forms(0).getElementsByTagName("document.form1")(1).Click 'エラーになる objIE.Document.forms(1).getElementsByTagName("input")(1).Click 'エラーになる Set objIE = Nothing End Sub --------------------------------------------------------------------------------- テキストにIDとPWを入れるところまでは出来たのですが、 ログインボタンを押すことができません。 すいませんがご教授ご回答よろしくお願いしますm( )m

  • VBAでIE操作

    こんばんは。エクセル2003です。 証券会社にVBAでログインを試みてるのですができません。 ソースの一部を転記します。 <label for="account_id"><span>ユーザー名</span></label> <input type="text" tabindex="1" id="account_id" name="account_id" /> <label for="password"><span>パスワード</span></label> <input type="password" tabindex="2" id="password" name="password" /> <div id="rememberbox"> <label for="remember" id="rememberlabel">ユーザー名を記録する</label> <input type="checkbox" tabindex="3" name="remember" id="remember" /> </div> なので、下記VBAコードを作りました。 Sub IGマーケット証券() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.igmarkets.co.jp/login/" Do While objIE.Busy = True DoEvents Loop Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.Document.all("account_id").Value = "test" objIE.Document.all("password").Value = "test" objIE.Document.Forms(0).submit Set objIE = Nothing End Sub ですが、 objIE.Document.all("account_id").Value = "test" のところでエラーになってしまいます。 objIE.Document.all("login").Value = "test" に変えても同じです。 何がいけないのでしょうか? アドバイスよろしくお願いします。

  • VBS(WSH)で開いたIEのウィンドウがアクティブにならない

    VBSでタイトルバーのみのIEウィンドウを開き、 SendKeyでtestと入力するスクリプトを作成しています。 ですが、開いたIEのウィンドウがアクティブにならず、 SendKeyがIEに送信されません。 VBSについては全くの初心者でして、ウィンドウがアクティブにならないのが 環境の問題なのか、プログラムの問題なのか判断できません。 どなたかご教授をお願いします。 IEのバージョンは8、OSはWinXPです。 以下、ソースです。 -------------------------------------------------- 'タイトルバーのみのIEを起動する Set WshShell = WScript.CreateObject("WScript.Shell") Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate("http://www.google.co.jp/") objIE.MenuBar = False objIE.StatusBar = False objIE.ToolBar = False objIE.AddressBar = False objIE.Visible = True '表示待ちループ Do While objIE.Busy WScript.Sleep 100 Loop '[test]で検索 WshShell.SendKeys("test") WScript.Sleep(100) WshShell.SendKeys("{TAB}") WScript.Sleep(100) WshShell.SendKeys("{ENTER}") --------------------------------------------------

  • VBA、IE操作、初心者になります

    webページの操作についての質問になります。 VBAでやりたいことです。 (1)webページを開き、指定したソースが表示されるまで、画面を更新 (2)ソース表示がされたら、指定したボタンをクリック (3)画面が移行する (4)移行したページの指定したボタンをクリック 不具合 (2)ボタンクリック後、ページは移行するが(4)のボタンが押せません。 しかし(3)のページを直接指定して開いた後に(4)の動作を行うときちんとボタンクリックが出来ます。 順番に(1)→(2)→(3)→(4)と処理を行うと(4)のボタンが押せないという状況です。 こんな感じで作成しました。 Dim objIE As InternetExplorer ' Set objIE = CreateObject("Internetexplorer.Application") objIE.Visible = True Dim strUrl As String strUrl = "●●●●●●?sc_i=shp_pc_top_mdItemRanking_01" objIE.navigate strUrl Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE Loop (1)の処理 Do While (True) If (TypeName(objIE.document.getElementsByClassName("●●●●")(0)) <> "Empty") Then Set tmp = objIE.document.getElementsByClassName("●●●●") flag = False For Each t In tmp If (InStr(t.getAttribute("class"), "●●●●") > 0) Then t.Click flag = True Exit For End If Next End If If (flag = True) Then Exit Do Application.Wait [Now() + "0:00:00.5"] objIE.Refresh Do Loop Until (objIE.Busy = False) And (objIE.readyState = 4) Loop (3)の画面移行 (4)の処理 Set objINPUT = objIE.document.getElementsByTagName("INPUT")  For n = 0 To objINPUT.Length - 1 If InStr(objINPUT(n).Value, "●●●●") > 0 Then objINPUT(n).Click Exit For End If Next Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE Loop Set objINPUT = Nothing 以上になります。 お手数ですが、どなたかご教示をお願いいたします。

専門家に質問してみよう