ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:WEB画面からのドキュメント読み込み方法について) WEB画面からのドキュメント読み込み方法について 2002/11/10 20:47 このQ&Aのポイント WEB画面からドキュメントを読み込み、抽出したいURLを表示する方法について教えてください画面の表示が完了しない内にドキュメントを読み込むための方法を教えてくださいWEB画面で複数のドキュメントを読み込み、イベントの完了を待って次に進む方法を教えてください WEB画面からのドキュメント読み込み方法について 表示したWEB画面からドキュメントを読み込み、次に表示したいURLを抽出したいのですが、うまくいったりできなかったりします。 どうも、画面の表示が完了しない内に、ドキュメントを読みとるためと思いますが、うまくとる方法を教えてください。 wb0.navigate urlx ・ ・ wb0.navigate urly Set doc = wb0.Document Text1 = doc.body.innerHTML→(urlyのドキュメントをみたいがurlxのドキュメントを読んでいるみたい) Set doc = Nothing urlz=(text1からurlを抽出) wb0.navigate urlz wb0.navigate urlyのイベントの完了を待って次に進む方法があればよいのでしょうか。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー todo36 ベストアンサー率58% (728/1234) 2002/11/11 12:41 回答No.1 NavigateComplete2かも 参考URL: http://oshiete1.goo.ne.jp/kotaeru.php3?q=367725 質問者 お礼 2002/11/12 17:53 NavigateComplete2でやってみましたが、やはりうまく行くときと行かない時がありました。お答えを参考にして、他にないか調べたところ、WB0_documentComplete(ByVal pDisp As Object, URL As Variant)が有り、使用してみたところ、確実に読みとれるようになりました。 おかげさまで、解決しました。ありがとうございました。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発Visual Basic 関連するQ&A NavigateとClickは動作として同じですか objIE.Navigate と objIE.Document.Links(i).Click は動作として同じですか? VBAで Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.goo.ne.jp/" Set objIE = Nothing End Sub のようにNavigateしてURLを表示するのと、 表示されたサイトのリンクを objIE.Document.Links(i).Click でクリックしてページを表示させるのは動作としては同じですか? HTMLやjavaスクリプトについてよくわからないのですが もしかして objIE.Document.Links(i).Click しないと動作しないなどはありますか? そしたらNavigateでもClickでもURLを開く事が可能なら、Clickした方がよいのでしょうか? ドキュメントからURLを抽出したい 指定したURLのドキュメントを変数に代入したんですが、 その変数に代入したドキュメントの中からURLのみを 抽出して、配列に代入することができません。 できれば、その配列に入っているURLで、重複するものは 1つにまとめるようにしたいです。 どなたか、上記のことを実現できる方法をご存知の方が いたらどうか教えて下さい。 どうぞよろしくお願いいたします。 Web画面の入力領域へのアクセス方法について Web画面上にある入力領域に対して文字列を入力するプログラムを 作成したいと思います。 例えば、インターネットエクスプローラを起動して、 YAHOO JAPAN!のホームページを開いて、 検索入力欄に「クリック」という文字列を設定する場合、 下記で実現できますが、 入力領域の指定を、例えば左上から何番目の欄として 指定することはできないのでしょうか? また、入力領域の座標位置として、指定することはでき ないのでしょうか? (ところで、"srchtxt"とは、何者なのでしょうか?). やりたいことは、Webのログイン画面(ユーザIDとパス ワードの2つの入力領域を持つ画面)に、入力を行うこ とです。 Sub Macro1() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate "http://www.yahoo.co.jp/index.html" ie.Document.getElementById("srchtxt").Value = "クリック" Set ie = Nothing End Sub 以上、よろしくお願いします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム ExcelVBAでIE画面データの取り込みかた http://www.geocities.co.jp/SiliconValley-Bay/1992/excel/web.html このページの記述を見てYahoo!のページはとりこめました。 ただ、新たにURLを指定してIEを立ち上げるのではなく、すでに開いているIE画面のデータを取りこむにはどのように直せばよいのでしょうか? ご教授ください。 Option Explicit Sub test() Dim ie As Object Dim x As Object Set ie = CreateObject("internetexplorer.application") Set ie = GetObject("", "InternetExplorer.application") ie.Visible = False ie.navigate ("http://www.yahoo.co.jp/") While ie.Busy Or ie.ReadyState <> 4: DoEvents: Wend Set x = New DataObject x.SetText ie.document.documentElement.innerText x.PutInClipboard ActiveSheet.PasteSpecial Set x = Nothing Set ie = Nothing End Sub エクセルVBAのオートフィルタについて いつもお世話になります。 エクセル2007でVBAでオートフィルタを操作したいのですが、 一部うまくいきません。 以下の様なコードを書いて 日付で絞り込みたいのですが、 何も抽出されません。 リストを見てみると、変数はちゃんと入っており OK ボタンを押すとその日付で抽出されます。 何故VBAでの操作では抽出されないのでしょうか。 ご存じの方がおられましたら、よろしくお願いします。 Sub test() Dim mydate As Variant Dim rng3 As Range Dim fmt As Variant Dim objList3 As ListObject Dim wb1 As Workbook Dim wb2 As Workbook Dim wb4 As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Dim sh4 As Worksheet Dim sh7 As Worksheet '----------------------------------------------------------------------- Set wb1 = Workbooks("301.xlsm") Set wb2 = Workbooks("1.xls") Set wb4 = Workbooks("2.xls") Set sh1 = wb1.Worksheets("@") Set sh2 = wb1.Worksheets("@@") Set sh3 = wb2.Worksheets("@@@") Set sh4 = wb2.Worksheets("@@@@") Set sh7 = wb4.Worksheets("@@@@@") '---------------------------------------------------------- sh2.Range("A1:z63").ClearContents With sh7 Set objList3 = .ListObjects("リスト1") fmt = .Range("A2").NumberFormatLocal mydate = Format(mydate, fmt) objList3.Range.AutoFilter Field:=7, Criteria1:=mydate objList3.Range.AutoFilter Field:=5, Criteria1:="test" Set rng3 = objList3.Range.SpecialCells(xlCellTypeVisible) rng3.Copy sh2.Range("A2") objList3.Range.AutoFilter Field:=5 objList3.Range.AutoFilter Field:=5, Criteria1:=">=190" Set rng3 = objList3.Range.SpecialCells(xlCellTypeVisible) rng3.Copy sh2.Range("A20") objList3.Range.AutoFilter Field:=5 objList3.Range.AutoFilter Field:=7 End With Application.CutCopyMode = False Set rng3 = Nothing Set fmt = Nothing Set objList3 = Nothing Set wb1 = Nothing Set wb2 = Nothing Set wb4 = Nothing Set sh1 = Nothing Set sh2 = Nothing Set sh3 = Nothing Set sh4 = Nothing Set sh7 = Nothing End Sub (一部省略しています) ファイルを開かずにカスタムドキュメントプロパティを操作したい 初めて質問させていただきます。 エクセルファイルの「右クリックメニュー」-「プロパティ」-「カスタム」の情報をVBを使って操作する方法を探しております。 通常は、workbook.CustomDocumentPropertiesを利用するかと思うのますが、 Dim wb As Workbook Set wb = workbooks.Open Filename:="c:\aaa.xls") '(1) 'Set wb = Workbooks("c:\aaa.xls") '(2) 'Set wb = CreateObject("c:\aaa.xls") '(3) debug.print wb.CustomDocumentProperties("顧客") (1)~(3)の方法でオブジェクトを取得した場合、 一度ファイルを開く行為が行われているようです。 しかしながら、私が「カスタムドキュメントプロパティ」を参照しようとしてるファイルにはパスワードがかかっていることがあります。 複数のファイルを一括で処理しようとした際にファイルを開くとパスワードを求められ、プログラムが停止してしまうのが不都合となります。 ただ、エクスプローラなどで「カスタムドキュメントプロパティ」の内容を見るときはファイルを開く動作が不要と思われます。 (少なくともパスワードは求められません。) なんらかの方法があるかと思うのですが心当たりのある方、お助けいただければと思います。 webbrowserにフォーカスを設定したい。 vb6のwebbrowser controlを使って、中国語の表示、記入を行うアプリを作っています。 ネットの質問箱で教えていただき、以下のとおり、webbrowser control内に、Text Boxを作りました。しかし、TextBoxにフォーカスがないため、入力のたびに、マウスをクリックしなくてはなりません。 そこで、常にテキストボックスにフォーカスがあるようにしたいのですが、このあと、どのように記述すればいいでしょうか。 ちなみに、webbrowser1.setfocusでは、何の変化も起きません。 webbrowserを使うのは初めてなので,、わかりやすく教えていただければ助かります。 Private Sub Form_Load() Dim doc1 As Object Dim body1 As Object WebBrowser1.Navigate2 "about:blank" Do While WebBrowser1.Busy DoEvents Loop On Error Resume Next Do DoEvents Set doc1 = WebBrowser1.Document Set body1 = doc1.body Loop While body1 Is Nothing On Error GoTo 0 With body1.Style .BorderStyle = "none" .margin = "0px" .overflow = "hidden" End With Set wbtext1 = doc1.CreateElement("TEXTAREA") wbText1.runtimestyle.Width = "100%" wbText1.runtimestyle.Height = "100%" body1.appendChild wbtext1 Set body1 = Nothing Set doc1 = Nothing End Sub 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 が出来てるからこのままうまく行きそうな気がするのですが? 理由を教えてください。ご回答よろしくお願いします。 フリーズする原因 参照設定で[Microsoft HTML Object Library] Sub test1() Dim html As MSHTML.HTMLDocument Set html = New MSHTML.HTMLDocument Dim document As MSHTML.HTMLDocument Set document = html.createDocumentFromUrl("http://www.goo.ne.jp/", vbNullString) ' ダウンロード待ち Do While document.ReadyState <> "complete" Loop ' 結果出力 Debug.Print document.Body.innerHTML Set html = Nothing Set document = Nothing End Sub このコードを実行したいのですが ステップインして行かないとフリーズしてしまいます。 「ダウンロード待ち」の部分で無限ループです。 なぜでしょうか? あと、ステップインで実行したとしても 「このページには、セキュリティの危険性がある可能性があります。続行しますか?」 が毎回出てくるのですが、 非表示にするかvbaで「はい」にさせる方法はありますか? 現在開いている全てのIEのURLのタイトルを取得し 現在開いている全てのIEのURLのタイトルを取得したいのですが Sub test() Dim shl As Object Dim wnd As Object Dim doc As Object Dim frg As Boolean Set shl = CreateObject("Shell.Application") For Each wnd In shl.Windows() If TypeName(wnd.Document) = "HTMLDocument" Then Set doc = wnd.Document Debug.Print doc.Title Set doc = Nothing End If Next Set shl = Nothing End Sub このコードが If TypeName(wnd.Document) = "HTMLDocument" Then でエラーになる時とならない時があります。 エラーになる時は、 実行時エラー -2147467259 ’Document’メソッドは失敗しました:'IWebBrowser2'オブジェクト となります。 エラーが発生する時としない時の違いが分かりません。 そもそもどういう意味のエラーでしょうか? IE11、オフィス2010です。 複数のWebアドレスからURLを抽出する方法はありませんか? 複数のWebアドレスからURLを抽出する方法はありませんか? 例えば下記のような2つ以上のURLからリンクされているURLを一気に抽出する方法はあるのでしょうか? http://www.google.co.jp/ http://www.yahoo.co.jp/ 私はIrvineというダウンロード支援ソフトを使用しています。 ブラウザに表示されているwebページはこのソフトの機能を使ってURLを抽出することが出来ますが、それはあくまで現在表示されているページのみです。 もっと効率よくURLを抽出する方法がないかと質問しました。 <html><head> <html><head> <style type="text/css"> <!-- #loading { position: absolute; /* ロード中に表示する文字列の絶対位置の設定(必須) */ top: 35%; /* 画面の上部からの文字の位置(必須) */ left: 45%; /* 画面の左側からの文字の位置(必須) */ font-style: italic; font-family: Verdana; } --> </style> <script type="text/javascript"> <!-- document.write('<style type="text/css">#doc { visibility: hidden; }<\/style>'); document.write('<div id="loading">Now Loading...<\/div>'); // ロード中に表示する文字列 var i = 0; var ele = document.getElementById("loading"); var str = ele.firstChild.data; function char_loop(ele, str) { ele.innerHTML = str.substring(0, i++ % str.length + 1); } setInterval("char_loop(ele, str);", 100); window.onload = function() { ele.style.display = "none"; document.getElementById("doc").style.visibility = "visible"; } // --> </script> </head> <body> <span id="doc"> ここに本文を表示 </span> </body> </html> 上のような、NewLoading... を作ってみたんですが、 画像のように表の内枠だけ残ってしまいます。 どうにかならないですかね。 ちなみにこの画像のURLは、↓こちらです。 http://shibaken.cool-biz.net/contents02.html お願いします。 エクセルVBAでWEBの操作方法 エクセル2000です。 VBAでNavigateを使いWeb画面(イントラネット)を開き、 .Document.all.Item("Hoge****No").Value = Target.Text のような方法で入力を行い、 .Document.forms(0).submit で送信ボタンクリックして新たな画面を開くところまではできております。 次に、その結果表示された画面の、「顧客」という文字列(オンマウスで色がかわります。)をクリックするにはどのようなコードになるのでしょうか? HTMLはほとんどわかりませんが、Web画面のソースを覗いて見ると、 id="ApplicantButton" class="MnuSmall" onclick="ApplicantClick(this);" onmouseover="SmallOn(this);" onmouseout="SmallOff(this);">顧客</td></tr><tr><td width="20%"> </td><td width="80%" というのがありましたのでこの部分だとは思うのですが、やりかたがわかりません。 よろしくおねがいします。 (o。_。)oペコッ NavigateとNavigate2の違いは? Sub Sample_Navigate() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub Sub Sample_Navigate2() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate2 "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub 上記二つのサンプルをテストしてみましたが違いが判りません。 Navigate2のヘルプを見ようとしても キーワードが見つかりません。が見つかりませんになってしまいます。 この二つのメソッドの違いを教えていただけますか? オブジェクトブラウザの情報だと Navigateは Sub Navigate(URL As String, [Flags], [TargetFrameName], [PostData], [Headers]) SHDocVw.InternetExplorer のメンバー Navigates to a URL or file. Navigate2は Sub Navigate2(URL, [Flags], [TargetFrameName], [PostData], [Headers]) SHDocVw.InternetExplorer のメンバー Navigates to a URL or file or pidl. と書いてありました。 引数の数は一緒でした。 Excel の VBA で、IEのWeb操作 ExcelのVBAで、A1~A10 のセルに入っている数値を下記 URL の「お問い合せ番号」の入力欄に自動でセットして、「検索」のボタンを押したいのですが、方法が分かりません。 http://www2.fukutsu.co.jp/inq/INQJJ120.html 下記のプログラムで表示までは出来るのですが、それから先の入力とボタンクリックの方法が分かりません。 何かアドバイスを頂けると幸いです。 > Dim oIE As Object > > 'IE起動 > Set oIE = CreateObject("InternetExplorer.Application") > oIE.Visible = True > > '目的のURLへ > oIE.Navigate "http://www2.fukutsu.co.jp/inq/INQJJ120.html" > > '完全表示まで待つ > While oIE.Busy: Wend > While oIE.document.readyState <> "complete": Wend innerHTMLの初期値 下記のソースがあります。 <SCRIPT TYPE="text/javascript"> <!-- function Change(id){ if(document.all){ document.all.result.innerHTML = document.all(id).innerHTML; }else if(document.getElementById){ document.getElementById('result').innerHTML = document.getElementById(id).innerHTML; } } //--> </SCRIPT> <a href="#" onClick='Change("ih2"); return false'>前</a><br> <a href="#" onClick='Change("ih3"); return false'>次</a><br> <div id="ih2" style="display:none">テキスト1</div> <div id="ih3" style="display:none">テキスト2</div> <br> <span id="result"></span> 前、次のリンクで表示されるテキストが切り替わるようにしているのですが、 クリックする前の段階では何も表示されていない状態です。 そこで、クリックする前でもid="ih2"の「テキスト1」が表示されている状態にしたいのですが、 なかなか出来ません。 functionの前に document.all.result.innerHTML = document.all.ih2.innerHTML; と記述してみましたが駄目でした。 id="ih2"の値を読み込んで表示させたいのですが、 何か良い方法はありませんか。 VBAでソースの一番上から取得するには? Sub 取得() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.google.co.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Debug.Print objIE.Document.body.innerHTML Set objIE = Nothing End Sub これだと、 <DIVstyle="DISPLAY:none"id=cst></DIV><TEXTAREAstyle="DISPLAY:none" id=csi></TEXTAREA><SCRIPT>if(google.j.b)document.body.style.visibility='hidden';</SCRIPT> からしか取得されないのですが、 実際のソースを見ると <!doctype html><html itemscope="itemscope" itemtype="http://schema.org/WebPage"> で始まってます。 VBAソースのてっぺんから取得する方法を教えてください。 innerHTML以外を使うのでしょうか? Web画面をプリントする方法(エクセルVBA) エクセル2000です。 VBAでNavigateを使いWeb画面(イントラネット)を開き、 .Document.all.Item("Hoge****No").Value = Target.Text のような方法で入力を行い、 .Document.forms(0).submit で送信ボタンクリックして新たな画面を開くところまではできております。 次に、その開いた画面をプリントしたいのです。 どのようなコードになるのでしょうか? ご教示いただければ幸いです。 (o。_。)oペコッ 現在のコードは以下のとおりです。 Dim objIE As Object Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '複数セル不可 If Target.Column <> 1 Then Exit Sub 'A列のみ対象 'IEが起動しているかチェック。objIE.Nameプロパティの取得に成功したら起動とみなす。 Dim tmp As String On Error Resume Next tmp = objIE.Name If Err.Number <> 0 Then 'エラーならIEが起動していないので、起動する Set objIE = CreateObject("InternetExplorer.Application") End If On Error GoTo 0 With objIE .Navigate "http://******.co.jp/******/**/***/Details/DetailsScr/init" .Visible = True Do While .Busy = True DoEvents Loop .Document.all.Item("Hoge****No").Value = Target.Text 'テストボックスへ入力:Name属性で指定 'オートコンプリートなどの機能が働く場合があるので、念のため待機 Do While .Busy = True DoEvents Loop .Document.forms(0).submit '送信ボタンクリック End With End Sub 数値の表示方法を教えてください。 以下のプログラムで千円単位のカンマの表示方法や 小数第2位までの表現方法を教えてください。 よろしくお願いします。 <script type="text/javascript"> function keisan(){ var syouhizei = document.form1.syouhin1.value * 1.05; document.getElementById("zei").innerHTML = syouhizei; } 【省略】 <td><span id="zei">0</span> 円</td> 「ヒア・ドキュメントというものは、PHPにはないのでしょうか? 決して、HTMLを表示するといった用途ではないことをご理解いただきたいのですが、例えば、Perlでは次のように書く、いわゆる「ヒア・ドキュメント(here document)」というものは、PHPにはないのでしょうか? 例えば、次のように記載すると、変数$textにあたかもファイルから読み込んだように、データーが入るというものです。これが使えると大変便利な場面が沢山あります。 $text =<< "END_OF_DATA"; aaa bbb ccc END_OF_DATA 注目のQ&A 「You」や「I」が入った曲といえば? Part2 今も頑なにEメールだけを使ってる人の理由 日本が世界に誇れるものは富士山だけ? 自分がゴミすぎる時の対処法 妻の浮気に対して アプローチしすぎ? 大事な物を忘れてしまう 円満に退職したい。強行突破しかないでしょうか? タイヤ交換 猛威を振るうインフルエンザ カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
NavigateComplete2でやってみましたが、やはりうまく行くときと行かない時がありました。お答えを参考にして、他にないか調べたところ、WB0_documentComplete(ByVal pDisp As Object, URL As Variant)が有り、使用してみたところ、確実に読みとれるようになりました。 おかげさまで、解決しました。ありがとうございました。