• 締切済み

Excel VBAでブラウザのリンクをクリックするには

Excelのバージョンは2003です。 VBAで出発地から到着地からNavitimeのサイトに接続して距離を取得するようなプログラムを作成していますが… 下記のように記述しています。 Private Sub Workbook_Open() Dim ie As InternetExplorer Dim addr0 As String Dim addr1 As String Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True addr0 = "住所1" addr1 = "住所2" ie.navigate "http://www.navitime.co.jp/?keyword0=" & urlEncode(addr0) & _ "&keyword1=" & urlEncode(addr1) & _ "&ctl=0604" Do While ie.Busy = True Do While ie.readyState <> 4 DoEvents Loop Loop End Sub Public Function urlEncode(str As String) As String Set sc = CreateObject("ScriptControl") sc.Language = "Jscript" Set js = sc.CodeObject urlEncode = js.encodeURIComponent(str) End Function リンクをクリックするにはどのようにすればいいのでしょうか。 アドバイス宜しくお願いします。

みんなの回答

回答No.1

ieのDocumentからクリックしたいHtmlエレメントオブジェクトを探し出してclick。 探し方はいろいろありますが、HTMLソースによって異なります。 リンクしたいエレメントにidやnameがあれば、getElementById/getElementsByName ハイパーリンクならie.document.linksをFor EachでまわしてhrefやinnerTextで判断。 フォームなら、ie.document.forms(番号またはフォームのid/name).submit この手の質問は過去ログにたくさんあるので、具体的なコードは検索してみてください。 下記コードは参考程度に 参照設定:Microsoft Internet Controls, Microsoft HTML Object Library Dim doc As HTMLDocument Dim link As HTMLAnchorElement Set doc = ie.Document For Each link In doc.Links Debug.Print link.innerText & " :URL = " & link.href Next

oracion2
質問者

お礼

回答ありがとうございます。 せっかくアドバイスいただいたんですが・・・ プログラム自体、全て白紙になりました。 申し訳ありません。

関連するQ&A

  • VBAでCSVファイルを読み込もうとしていますが、

    VBAでCSVファイルを読み込もうとしていますが、 「ファイルが見つかりません」とエラーが表示されます。 どのように対処していいのかわかりません。 教えてくください。 Sub readCsv() Dim csvFile As String Dim ch As Integer Dim csvStr As String Dim str() As String Dim i As Integer Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) targetFolder = oFolder.Items.Item.Path Set fso = CreateObject("Scripting.FileSystemObject") Set fileList = fso.GetFolder(targetFolder).Files For Each file In fileList csvFile = file.Name ch = FreeFile Open csvFile For Input As #ch i = 1 Do While Not EOF(1) Line Input #ch, csvStr Close #ch str = Split(csvStr, ",") Range(Cells(i, 1), Cells(i, UBound(str) + 1)) = str i = i + 1 Loop Next End Sub

  • サイトの記事をエクセルに落としたいのですが・・・

    あるサイトの記事をエクセルに落とそうと思い、下記の様なプログラムを組んでみましたが、様々なエラーが出て、かつそのエラーがなぜ起きているのか分からない状態になってしまいました。どのように修正すればよいのか、ご存じの方がいらしたら、ぜひご教授下さい。 もしくは、もっと別のやり方で記事をエクセルに落とせる方法をご存じの方がいらしたら、ぜひご教授下さい。 大雑把な質問になってしまい、「もっと自分で考えてから質問しろ」とお叱りの言葉を頂くかと思います。私自身、なるべく色々と調べてやってきましたが一か月格闘しても遅々として進まずデッドラインが近づいてきておりまして・・・また周りにVBAを知っている人が皆無という状況に耐え切れなくなり、このような質問をしてしまいました。平にご容赦下さい。 また何か補足情報が必要でしたらご遠慮なくコメントいただければと思います。よろしくお願いいたします。 Sub Macro4() Dim URL As String 'ファイルパス Dim IE As Object 'オブジェクト Dim Myhtml As Variant 'HTMLタグデータ Dim PART As String '収録されているPART Dim TITLE As String '何話目か Set IE = CreateObject("InternetExplorer.Application") PART = 1 Do While PART < 2 TITLE = 0 Do While TITLE < 10 With IE .Navigate "http://syarecowa.moo.jp/" + PART + "/" + TITLE + ".htm" .Visible = Falese Do While .Busy = True DoEvents Loop Myhtml = IE.Document.Body.innerText Myhtml = Replace(Myhtml, "<BR>", "") Cells(TITLE, PART) = Myhtml .Quit End With Set IE = Nothing Loop Loop

  • 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で出来ないでしょうか? もしくは、もう少し分かりやすい方法は無いでしょうか。 (ファイルを保存しますか?のダイアログの「保存」をクリックして  所定の場所におき、開きたい。 そのまま開くのでもいいけれど、動作が不安定になるのは困る) 以上、よろしくお願い致します。

  • 変数の定義の仕方をご教授ください。

    Option Explicit Function EncodeURI(uri As String) As String Set sc = CreateObject("ScriptControl") sc.Language = "JScript" Set js = sc.CodeObject EncodeURI = js.encodeURIComponent(uri) End Function ------------------------------------------- をデバッグすると「sc =」と「js =」の部分が「変数が定義されていません」となってしまいます。 変数を宣言する時に、 dim sc  as まではわかるのですが変数のデータ型を何にしてあげればいいのでしょうか?

  • ExcelのVBAでHTML内の特定のタグの出現回数を調べたい

    たとえばYahoo!JapanのサイトのHTMLのTDタグの出現回数を調べる場合 下記のVBAに何を付け加えればよいのでしょうか? Sub tagCount() Dim cnt As Integer Dim IE As Object Dim HTML As String Set IE = CreateObject("InternetExplorer.Application") IE.Navigate ("http://www.yahoo.co.jp/") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend HTML = IE.Document.body.innerHTML IE.Quit 'td_count = ここの部分がわかりません。 '文字列の出現回数をカウントする関数はないのでしょうか? MsgBox td_count End Sub ご存知の方がおられましたらご回答をよろしくお願いします。 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003

  • InternetExplorer.Applicat

    Sub test1() Dim objIE As Object Dim i As Long Dim MyRow As Long Dim Str As String Dim tmp As Variant Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://oshiete.goo.ne.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Str = objIE.Document.Body.innerHTML 'ソースを抜き出す tmp = Split(Str, Chr(10)) '配列に格納する MyRow = 1 '初期値 For i = LBound(tmp) To UBound(tmp) Cells(MyRow, 1) = tmp(i) MyRow = MyRow + 1 Next i objIE.Quit Set objIE = Nothing End Sub ************************************************** Sub test2() Dim objIE As Object Dim Str As String Dim tmp As Variant Dim i As Long Dim MyRow As Long Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", "http://oshiete.goo.ne.jp/", False objIE.Send Str = objIE.responseText 'ソースを抜き出す tmp = Split(Str, Chr(10)) '配列に格納する MyRow = 1 '初期値 For i = LBound(tmp) To UBound(tmp) Cells(MyRow, 1) = tmp(i) MyRow = MyRow + 1 Next i Set objIE = Nothing End Sub ************************************************** 上記の二つのコードは どちらもVBAでHTMLソースをエクセルに書き出すコードなのですが 結果が違います。 なぜなのでしょうか? 実際のソースを確認したら CreateObject("MSXML2.XMLHTTP") の方が正しかったです。 CreateObject("InternetExplorer.Application") は何が取得されてるのでしょうか?

  • ExcelのVBAの正規表現で二重引用符を含む文字列を検索できるようにしたい

    二重引用符を含む文字列を検索できるようにするには 下記の記述の re.Pattern = "<hr class=\"separate\">" の部分をどのように直せばよいのでしょうか? Sub tagCount() Dim cnt As Integer Dim IE As Object Dim HTML As String Set IE = CreateObject("InternetExplorer.Application") IE.Navigate ("http://www.yahoo.co.jp/") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend HTML = IE.Document.body.innerHTML IE.Quit Dim re As RegExp Dim mc As MatchCollection Dim m As Match Set re = New RegExp re.Pattern = "<hr class=\"separate\">" re.Global = True re.IgnoreCase = True Set mc = re.Execute(HTML) MsgBox mc.Count End Sub ご存知の方がおられましたらご回答をよろしくお願いします。 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003

  • エクセル 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

  • EXCEL VBAからIEを起動する際のバージョンについて

    下記コーディングでEXCELのVBAよりIEを起動する際、IE5.0では正常に動作するのですが、他のバージョン(IE5.5等)ではうまく起動出来ません? 良い解決策があれば教えていただきたいのですが。 Dim IE As Object Dim URL As String Set IE = CreateObject("InternetExplorer.Application") URL = "ftp://XXXXXXXX/999/" With IE .Navigate2 URL .Visible = True .Height = 400 .Width = 400 .Top = 0 .Left = 0 End With Windows98/Excel2000

  • VBA:最下層のファイルを取得

    最下層にあるファイルのファイル名を取得したく下記の様なプログラミングを組んでみたところ、 「ファイル名または番号が不正です」というエラーが表示されてしまいます。比較演算子などをいじって 試行錯誤してみましたが、どうしてもできません。どのように修正すればよいのでしょうか。ご回答よろしくお願いいたします。 http://syarecowa.moo.jpというサイトのmenu001.htmの下にある"1/3ケタの数字.htm"のファイル名を全て取得したいと考えています。 現在組めているコードは下記の通りです Dim cnt As Long ---------------- Sub Macro5(Path As String)    Dim buf As String, f As Object    buf = Dir(Path & "/#/###.htm")  ★★ここでエラーが生じていしまいます★★    Do While buf <> ""    cnt = cnt + 1    Cells(cnt, 1) = buf    buf = Dir()    Loop    With CreateObject("Scripting.FileSystemObject")     For Each f In .GetFolder(Path).SubFolders    Call Macro5(f.Path)    Next f    End With End Sub -------------------------- Sub Macro6() Dim URL As String 'ファイルパス Dim IE As Object 'オブジェクト Dim Myhtml As Variant 'HTMLタグデータ    'インターネットに接続    Set IE = CreateObject("InternetExplorer.Application")    With IE    .Navigate "http://syarecowa.moo.jp/menu001.htm"    .Visible = Flase    Do While .Busy = True    DoEvents    Loop    'Macro5呼び出し     cnt = 0     Call Macro5("http://syarecowa.moo.jp/menu001.htm")    End With    End Sub