エクセルVBAでIE操作

このQ&Aのポイント
  • エクセルVBAを使用してIEを操作し、画面上のリンクをクリックする方法について教えてください。
  • 具体的には、http://okwave.jp/mypage にアクセスし、画面右上のカテゴリをクリックした後、Excel(エクセル)をクリックする方法を知りたいです。
  • マクロには、どのようにクリックを記述すれば良いのでしょうか?
回答を見る
  • ベストアンサー

エクセル VBA で IE操作 

エクセルVBAにて IEを操作し リンクをクリックするには どのような記述になりますでしょうか? たとえば http://okwave.jp/mypage へアクセスし画面右上 カテゴリ をクリック 次に Excel(エクセル) をクリック という具合に 画面に表示されている文字を順番にクリックしたいです。 マクロを見つけてきましたが クリックというのはどう記述していいやらさっぱりです。 Sub testIE() Dim objIE As InternetExplorer 'IEオブジェクトを準備 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = True 'IEを表示 objIE.navigate "http://okwave.jp/mypage" 'IEでURLを開く Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち DoEvents Loop

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (708/1464)
回答No.1

このようなプログラムを組むときは、リンクがどこにあるか調べる必要があります。 調べたらカテゴリは28番目、エクセルは 240番目にありました。 リンクは0から始まるので、下のようなプログラムになります。 ' Option Explicit ' Sub Macro1() '   Dim IE As Object '   Set IE = CreateObject("InternetExplorer.Application")   IE.Visible = True   IE.Navigate "http://okwave.jp/mypage"   BusyWait IE   IE.document.Links(27).Click   BusyWait IE   IE.document.Links(239).Click   Set IE = Nothing End Sub ' Sub BusyWait(IE As Object) '   While IE.Busy Or IE.readyState < 3     DoEvents   Wend End Sub ' しかし、調べるのは大変だし、ホームページのデザインが変わったら、プロクラムを直す必要があります。 ボタンを探すサブルーチンを作れば解決しますが、省略します。 http://okwave.jp/c1035.html を直接指定した方が早いと思います。 これなら、ショートカットを作るだけで済むので、プログラムはいりません。

ch20090926
質問者

お礼

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

ch20090926
質問者

補足

回答ありがとうございます。 動的に生成されるホームページなので リンクの位置というか数はいつも一定とはかぎりません。 ただ リンクする文字は決まってます。 ここでは OKWEBを一例としてとりあげました。 

関連するQ&A

  • vbaでIEの操作

    こんばんは。やりたいことができないので教えてください。 vbaで指定のurlを開きたいです。 エクセル2003とIE8です。 Sub test001() Dim ObjIE As Object Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True ObjIE.navigate "http://jp.msn.com/" Do While ObjIE.Busy = True '表示させるまで待つ DoEvents Loop End Sub これでIEを立ち上げてURLを開けるのですが これでは新しいウインドウで開いてしまいます。 現在IEを立ち上げていて、上記のコードを実行すると 新たなタブで開きたいですが解決策はありますか? ObjIE.Visible = True が原因かと思い、これを抜かしてみましたが そうすると何も起こりません。 VBAで既に開いているIEの新しいタブでURLを開く方法をご教授ください!よろしくお願いします。

  • ie操作 ボタンが押せる時と押せない時がある

    こんばんは。よろしくお願いします。 ie操作でボタンが押せる時と押せない時があるのですが、 違いがわかりません。 --------------------------------------------------------- Sub test1() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.mitsui-direct.co.jp/customer/" 'ダイレクトにログインページへはいけない。 Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate "javascript:gotoMyhp();" Set objIE = Nothing End Sub --------------------------------------------------------- これなのですが、http://www.mitsui-direct.co.jp/customer/のサイトへいって、 右側の「Myホームページログイン」を押したいのですが、 最初は、objIE.Navigate "javascript:gotoMyhp();" でうまくいってたのですが、 なぜか出来なくなってしまいました。 そんな事ありますか? コードが間違ってるのでしょうか? ご教授よろしくお願いします。

  • あるHPにエクセルのVBAから入力したいのですが

    はじめまして。VBAの初心者です。 現在、エクセルVBAを用いてIEにログインするコードを作っています。 で、他のページはうまくいったのですが、 https://www.wnp.waseda.jp/portal/portal.php このホームページだけは他のページと同じやり方でやっても、フォームに文字を入力することができません。 ちなみに以下のコードを記述しましたがうまくいきませんでした。 'IEの起動 Dim objIE As Object '変数を定義します。 Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。 objIE.Visible = True '可視、Trueで見えるようにします。 '処理したいページを表示します。 objIE.Navigate "https://www.wnp.waseda.jp/portal/portal.php" 'ページの表示完了を待ちます。 While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。 DoEvents Wend objIE.Document.Form1("loginid").Value ="私のID" '←ここでエラーがでます。 (1)なぜ他のHPと同じようにはいかないかという点と、できれば、(2)うまくいくコード、を教えていただければ嬉しいです。 よろしくお願いします。

  • IE操作 VBA

    リコーのスキャナーを使っているのですが http://xx.xx.xxx.xxx/web/guest/ja/websys/webArch/mainFrame.cgi を開いて、 javascript:wsMenu_jumpUrl('../../webdocbox/docListPage.cgi',10000) をクリックしたいのですが、どのように行えばよろしいでしょうか? objIE.Navigate "javascript:wsMenu_jumpUrl('../../webdocbox/docListPage.cgi',10000)" をしてもダメなので、 Sub スキャナー() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://xx.xx.xxx.xxx/web/guest/ja/websys/webArch/mainFrame.cgi" objIE.Visible = True Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Document.Links.Length objIE.Quit Set objIE = Nothing End Sub で、リンクの数を数えて、ひとつずつクリックして確認してみようと思ったのですが 0が返ってきてしまいます。 VBAでjavascript:wsMenu_jumpUrl('../../webdocbox/docListPage.cgi',10000) を押す方法を教えてください。

  • ie操作 ローカルパスだとエラーになる

    ヤフーなら問題なくコードが動くのに、URLがローカルのパスだと、エラーになってしまいます。 具体的には、 *********************************************************** Sub Sample1() Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.yahoo.co.jp/" objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub *********************************************************** だと、問題なく実行されるのに、 *********************************************************** Sub Sample2() strFName = MyDesktop & "\index.html" Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate strFName objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub ------------------------- Function MyDesktop() Dim WSH As Variant Set WSH = CreateObject("Wscript.Shell") MyDesktop = WSH.SpecialFolders("Desktop") Set WSH = Nothing End Function *********************************************************** だと、 Do Until objIE.ReadyState = 4 で オートメーションエラー 起動されたオブジェクトはクライアントから切断されました。 となります。 なぜローカルだと、エラーになるのでしょうか? 何が違うのでしょうか?

  • vbaie操作 新しく開いたウインドウを操作したい

    こんばんは。いつもお世話になっております。 新たに開いたウインドウをVBAでキャッチ(?)して、 オブジェクトの中に入れたいのですがやり方が分かりません。 OS:XP、オフィス2003です。 http://okwave.jp/qa/q7643293.html を参考に、 --------------------------------------------------------- Option Explicit Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop ’安否情報確認サイト 【J-anpi】をクリックする For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).href = "http://anpi.jp/" Then objIE.Document.Links(i).Target = "_blank" objIE.Document.Links(i).Click Exit For End If Next i objIE.Document.all("name").Value = "test" 'エラーになる Set objIE = Nothing End Sub --------------------------------------------------------- を実行した時に、 http://anpi.jp/top のページの“名前“をVBAで入れたいのですが、実行時エラー91になります。 理由は、 objIEには、http://www.goo.ne.jp/が入ってるから、 http://anpi.jp/topのページは操作できないのが原因だと思うのですが Dim objIE2 As InternetExplorer のように新たなオブジェクトを作って、 objIE2にhttp://anpi.jp/topを入れて操作するにはどうすればいいでしょうか? 最初から、 objIE.Navigate http://anpi.jp/top を開いたり、 objIE.Navigate2 http://anpi.jp/top , 2048 で新たなタブを開く方法以外でお願いします。 Debug.Print objIE.LocationURL を見ると、 http://www.goo.ne.jp/ が返ってきます。(そりゃそうか) 本当はこのサイトはサンプルで実際は、 vbaで objIE.Document.Links(i).Target = "_blank" objIE.Document.Links(i).Click をクリックした場合、 新たに開いたウインドウをVBAでテキストに文字を入れたり、ボタンを押したりの操作する方法を知りたいのです。 objIE.document.Links(i).Click このタイミングで、 objIEにhttp://anpi.jp/topがはいればいいなーって思ってます。 --------------------------------------------------------- Sub test2() Dim objIE As InternetExplorer Dim objIE2 As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") Set objIE2 = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop ’安否情報確認サイト 【J-anpi】をクリックする objIE2.Navigate "http://anpi.jp/top" objIE2.Visible = True objIE2.Document.all("name").Value = "test" 'エラーになる Set objIE = Nothing Set objIE2 = Nothing End Sub --------------------------------------------------------- これにするしかないのでしょうか? ご回答よろしくお願いします。

  • 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は通過しているようです。 なぜボタンを押せないのでしょうか? ご教授よろしくお願いします。

  • エクセルのVBAで最終行までループする方法

    エクセルのVBAで最終行までループする方法を教えてください。 下記がコードになります。 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate Range("A1").Value While objIE.ReadyState <> 4 Or objIE.Busy = True DoEvents Wend Range("B1").value = objIE.Document.all("zoom1").href

  • VBAでIE操作をするサンプル

    VBAでIE操作をするサンプルをネットでいくつか見ているのですが Sub Sample1() Dim objShell As Object Dim objIE As New InternetExplorer Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing Set objShell = Nothing End Sub Sub Sample2() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub ではどちらを使った方がいいのでしょうか? 圧倒的にSample2の方がネットでは多いのですが Sample1のやり方もあることを知りました。 Sample1の方法でブラウザを開くメリットはあるのでしょうか?

  • VBでのIE操作

    VBでのIE操作をしようとして色々調べています。 色んなサイトを見ながら途中までは何とかできましたが、どうしてもリンク先を表示できません。 お分かりになる方いましたら、お力添えいただければ幸いです。 状況: Excel2007使用  IE7  VB初心者です。 やりたい内容: VBでIEを立ち上げる ↓ ページからリンクをクリックする (ページ上に画像が貼り付けてあって、そこにURLくっついててハイパーリンクになっている。) (セキュリティの関係でハイパーリンク先を初期で表示することはできない。) ↓ 表示されたページに検索したい項目を入力 ↓ 結果をエクセルに反映する。 以上の作業をVBで組もうと思ってます。 よろしくお願いします。 Option Explicit Sub IE_Test() 'IEの起動 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '処理したいページを表示します。 objIE.Navigate "(表示したいページ)" 'ページの表示待ち   While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend '開かれたIEを探す。 Dim objSHELL As Object Dim objWINDOW As Object Dim newIE As InternetExplorer '調べる項目に対して、、、 For yCNT = 3 To 102 ' If Trim(Cells(yCNT, 1)) = "" Then Exit For 'A列が空白になったらループを抜ける ここがわからない。。。 (画像になっているハイパーリンクをクリックしたい、、、) 'シェルのオブジェクトを作成する Set objSHELL = CreateObject("Shell.Application") Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1) Set objSHELL = Nothing '念のため、新しいウインドウの表示を待つ While newIE.readyState <> READYSTATE_COMPLETE Or newIE.Busy = True DoEvents Wend 'ページが表示されたので、表示された文章に対して、処理を行います。 newIE.document.all("phone_no").Value = Cells(yCNT, 1) 'A列の文字を参照する newIE.document.all("exec").Click '表示されたウインドウ(newIE)からデータをセットする Cells(yCNT, 2) = newIE.document.body.innerText '検索の結果をエクセルに反映 '新しいIE(子IE)を閉じる newIE.Quit Set newIE = Nothing '前のIE(親IE)を閉じる   objIE.Quit set objIE = Nothing Next yCNT End Sub 上記が現在までのできているコードです。 ここにも色々間違いがある可能性もあります。 ご指摘頂けましたら幸いです。 よろしくお願いします。

専門家に質問してみよう