• 締切済み

エクセルVBA ブラウザのコントロールについて

Azzz___の回答

  • Azzz___
  • ベストアンサー率40% (9/22)
回答No.2

こんにちは。 この手の方法はIEの動作やPC環境によって、動作が微妙に変わることがあり、できる場合もあれば、できない場合もあるというのが私の感想です。 方法は2個あると思います。 既に回答がありますが、Sendkeyを使う方法です。 ただし、この方法が上記で言ったように、思うようにいかないので、 やたらと DoEventsを前後に入れてみたり、 For i = 1 to 1000   DoEvents Next i などど意味があるか分かりませんが、試したり Application.Wait(Now + vba.TimeSerial(0,0,5)) という方法も良く見かけるパターンです。 ただしいずれの方法でも、確実に動くかどうかが断言できない位 曖昧であると感じています。 そこで、もうひとつの方法をお勧め致します。 こちらはAPIを使ってダウンロードする方法です。 objLINK2をオブジェクトブラウザで確認(hrefかな?)すると リンク先が格納されているプロパティがあるので、それを上記のAPIで指定してやれば ダウンロードされるので、 必要に応じそれをShellなどで開いてあげればいいかと思います。 ダウンロードファイルはテンポラリにも保存できると思うので、 使い勝手まずまずです。

関連するQ&A

  • VBAにて、セルの内容と一致しない場合の処理

    VBAを独学で学んでいる者です。 実力・知識がないながらも検索エンジンなどを頼りに頑張っています。 しかしながらどうしてもわからない事があり、煮詰まってしまいましたので、質問させていただきました。 当方、VBAにてIEを操作し、セルの内容を自動入力していくプログラムを書いています。 以下に記述しているものや、「document.body.innertext」で取得したIEの情報と書き込みたいセルの内容が一致しない場合にエラーメッセージを表示したいのですが、どうもうまくいきません。 If~Thenなどを使うことで条件分岐できるのだとはおもうのですが、当方の記述ですと条件を無視(?)してElseに飛んでしまいます。 当方が記述している内容は以下です。 (Cells(1, 1)には文字列を入力しています。) ~ここから~ 'リンク情報からオブジェクトを探し.Clickする For n = 0 To objIE.document.Links.Length - 1 'リンク数分まわす Debug.Print objIE.document.Links(n).innertext 'デバックで表示する 'リンク先(.text)をチェックする(文字列比較する) If objIE.document.Links(n).innertext = ActiveSheet.Cells(1, 1).Text Then objIE.document.Links(n).Click '.Clickでクリックしてみた Exit For '見つかったので強制的にループを抜ける Else MsgBox "NG!!", vbExclamation Exit Sub End If Next ~ここまで~ Else MsgBox "NG!!", vbExclamation Exit Sub を消すと、「For n = 0 To objIE.document.Links.Length - 1 」がinnertextを取得し、Cells(1, 1)の内容を読み取りクリックを実行してくれるのですが、Elseを入れると、Cells(1, 1)の内容と一致しているにも関わらず、Elseへ移行し、NGのメッセージボックスが出てきます。 記述が間違っているのでしょうか? 何か他の記述がございますようでしたらご教授願えますでしょうか? 宜しくお願い致します。

  • VBAでリンクを踏みたい

    とあるサイトにログインした後に、「このページを印刷する」というリンクをVBAでクリックしたいのですが ソースは <div class="section sideinfo"> <a href="#" class="print" onClick="JavaScript:openPrintWindow('CG017_001', 'CG018'); return false;">このページを印刷する</a> </div> こうなっています。 VBAコードで objIE.Document.all.Item("JavaScript:openPrintWindow('CG017_001', 'CG018')").Click をすると、「オブジェクト変数または With ブロック変数が設定されていません。」になります。 For i = 0 To objIE.Document.Links.Length - 1 'Debug.Print objIE.Document.Links(i).innerHTML If objIE.Document.Links(i).innerHTML = "このページを印刷する" Then objIE.Document.Links(i).Click Exit For End If Next i これで踏むことはできるのですが、 ソースから文字を探してそれをVBAコードにあてて踏むことはできないのでしょうか?

  • 2ページ目が表示されるまで待つには?

    target="_blank" で開かれるリンクで、開いた先が完全に表示されるまで待つにはどうすればよいでしょう? 例えば ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Sub Sample() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://www.tagindex.com/html_tag/link/a_target.html" 'これは1ページ目を表示させるまで待つ Do Until objIE.Busy = False And objIE.readyState = 4: Loop For i = 0 To objIE.document.Links.Length - 1 If objIE.document.Links(i).innerText = "新しいウィンドウで表示します" Then objIE.document.Links(i).Click 'ここで2ページ目を表示させるまで待つには? Exit For End If Next Set objIE = Nothing End Sub ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ という状態で、 objIE.document.Links(i).Clickを実行した後の表示を待つにはどうすればいいでしょう? (http://www.tagindex.com/html_tag/link/target_example.htmlのページです) objIEの値は、"http://www.tagindex.com/html_tag/link/a_target.html"のままなので、 新しくobjIEを作ればいいのでしょうか? ご回答よろしくお願いします。

  • VBAでJAVAをコントロール

    javascriptのリンクが、<a href="javascript:void(0);">なんたらかんたら</a> であれば記載のソースが通じるのですが、 【今回の問題】 【html部分】 onclick="javascript:updateDisp();return false;" alt="なんたらかんたら"><input type="hidden" name="allupdate" value="なんたらかんたら"> 【javascriptの部分】 function updateDisp(){ update_flg = window.confirm("なんたらかんたら"); if(update_flg == true){ document.updateForm.submit(); } else{ alert("キャンセルしました。"); } とやられた途端に全く通じなくなりました。 どのように回避したらよいでしょうか。 【今回のではなく前回の(javascript:void(0);)成功分】 Private Sub CommandButton99_Click() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://xxxx/entry" Do While objIE.Busy = True DoEvents Loop Application.Wait (Now + TimeValue("00:00:03")) objIE.Document.all("ShopShopId").Value = Range("C8") objIE.Document.all("ShopPassword").Value = Range("C9") objIE.Document.forms(0).submit Application.Wait (Now + TimeValue("00:00:05")) For Each Obj In objIE.Document.getElementsByTagName("a") If Obj.innerText = "なんたらかんたら" Then Obj.Click Exit For End If Debug.Print objIE.LocationURL objIE.Navigate "xxxx/entry/entry_tops/all_update?prm=xxxxxxxxxxxxxxxxxxxxxxx" For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).href = "javascript:void(0);" Then Application.Wait (Now + TimeValue("00:00:05")) objIE.Document.Links(i).Click Application.Wait (Now + TimeValue("00:00:05")) Exit For MsgBox "ループ抜け" End If Exit Sub Next Next objIE.Quit End Sub 上記は【今回の問題】に通じません。 'objIE.Navigate.Document.updateForm.fireEvent ("なんたらかんたら") 'objIE.Document.Script.updateDisp "javascript:document.updateForm.submit(true);" など試行錯誤しておりますが、javascriptのポップアップが回避できません。 どなたか何とかご教授お願いいたします。

  • 三菱東京UFJ銀行に自動ログインしたいのですが

    どうもうまくできません。 ログインボタンが押せません。 Sub tset() Dim objIE As Object Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate "https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop With objIE.document .all("KEIYAKU_NO").Value = "test" .all("PASSWORD").Value = "PASSWORD" End With For i = 0 To objIE.document.Links.Length - 1 If objIE.document.Links(i).innerHTML Like "*alt=ログイン*" Then objIE.document.Links(i).Click Exit For End If Next i For i = 0 To objIE.document.Links.Length - 1 If objIE.document.Links(i).innerText = "ログイン" Then objIE.document.Links(i).Click Exit For End If Next i End Sub でも、押せないのですが、ご教授いただけませんか? よろしくお願いします。

  • 繰り返し処理?VBA

    エクセルのVBAの中で下記の様なものを作りました。 VBAで開かせたブラウザのページの中に、画像のボタンが数個あり、 その中の一つのボタンをクリックして、ページを移動させたいのですが、下記でやっても、数回に1回はページを移動しないという問題が起きています。 処理は行われているはずなのですが、確実にページを移動させてから、 次の処理を行わないと、次の処理で止まってしまいます。 いい方法があれば、伝授ください。 開いているページから、111.htmlページへ確実に移動した事を確認してから、次の処理をさせたいのです。 For Each link In objIE.Document.Links If link.href = "​http://www.***.111.html"​ Then link.Click Exit For End If Next

  • 「OuterText」と「「innerText」」

    「OuterText」と「「innerText」」の違いは何でしょう? エクセルVBAです。 Sub test() Dim objLINK As Object Dim objIE As InternetExplorer Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.GoHome objIE.Visible = True Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For Each objLINK In objIE.Document.Links i = i + 1 Cells(i, 1) = objIE.Document.Links(i - 1).OuterText ' Next objIE.Quit Set objIE = Nothing End Sub のOuterTextをinnerTextに変えても結果は同じなのですが、 「OuterText」と「「innerText」」の違いはなんでしょう? ヘルプを見ようと思ったのですが なぜか見れないので教えてください。

  • VBSでobjLINK.InnerTextの一部だ

    VBSでリンクをクリックしたいのですが、 某所からコピペしたVBSのスクリプトです。 これを実行すると、たしかに YAHOOのオークションに行きます。 ============================== Option Explicit Dim objIE Dim objShell Dim strBody Dim objLINK 'Shell.Application オブジェクトの作成 Set objShell = CreateObject("Shell.Application") 'IE を起動して Yahoo のトップページを開く Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True 'IEウィンドウを表示 objIE.Navigate2 "http://www.yahoo.co.jp/" 'Yahoo のページが起動する 'ページの読み込みが終わるまで待機する Do Until objIE.Busy = False '空ループだと無駄にCPUを使うので250ミリ秒のインターバルを置く WScript.sleep(250) Loop ' Yahoo トップページのオークションのリンクをクリックする For Each objLINK In objIE.Document.Links If objLINK.InnerText = "オークション" Then objLINK.Click Exit For End If Next ============================ 質問させていただきたいのは If objLINK.InnerText = "オークション" Then この部分が例えば「オークション」でなくとも「オークショ」のように アンカーテキストリンクの一部が同じだったら、いけるようにしたいのですが、 どうしたらよろしいでしょうか? 「オークション」 だったら 「オークショ*」 や 「*クション」 とかでもいけるのかなーとおもってたんですが、 全然わからないんです。 どうかよろしくお願い致します。

  • VBAでエクセルからツイッターに投稿

    VBAでエクセルからツイッターに連続投稿したいのですが難しいでしょうか?? 試しに作ってみたVBAです。 'モバイルなら投稿できるかも・・・? Sub tweet() Dim ie As InternetExplorer Dim txtAreaInput As HTMLTextAreaElement Set ie = CreateObject("internetExplorer.Application") 'IEを開く○ ie.Visible = True ie.Navigate "https://mobile.twitter.com/compose/tweet" 'ツイッターを開く○ Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE 'ページの読み込みを待つ○ DoEvents Loop Range("B2").Select '画像ファイルのセルをコピー○しかし連続となるとやり方わからないです。 Selection.Copy Set txtAreaInput = ie.Document.getElementsByName("textarea")(0) 'セルを選択× txtAreaInput.Value = ActiveSheet.Cells(2, 1).Value ObjIE.Document.all("camera-input").Click '画像パスを開く×そもそもカメラボタンが消えている?? SendKeys "^v{ENTER}" '画像ファイルのパスをペーストしエンター×効かない?? For Each Anchor In ie.Document.getElementsByTagName("A") 'ツイートを投稿×ボタンが押せない If Anchor.innerText = " ツイート " Then Anchor.Click Exit For End If Next End Sub

  • EXCEL VBA でIEを制御して、INPUT type=file で出るダイアログに入力できませんか?

    EXCEL VBA から、objIEオブジェクトを使って、IEを制御して、WEBページを制御するプログラムを作っています。 ※通販サイトのモール内管理の自動化プログラムです。 その際、操作対象のページに、INPUT type=file でファイルを入力するブロックがあります。 ここに自動でファイルを入れたいのですが、INPUT type=file を表示するボタンに対し .clickを入れるとそこでVBAが停止してしまいます。 そのモールそのものは、色々な制約があるので、公開できませんが、抜き出したのが http://royal-e.heteml.jp/js_test/input_test.htm になります。 objIEオブジェクトで INPUT type=file に希望のファイル名を入力することは出来るでしょうか? 方法をご存知の方がいらしたら、教えてください。