• ベストアンサー

携帯用サイトをエクセルVBAから見る

どうか教えてください 携帯用サイトのHTMLをエクセルで取得したく それをするにはuser-agentを変更する必要があるのですが エクセルVBAから実行するにはどのようにしたらいいでしょうか。 携帯用サイトのHTMLデータを変数に入れるまでをお願いします。 -- エクセル2003

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

  • ベストアンサー
回答No.2

> 具体的にこれを実行するには何が必要でしょうか? msinet.ocx というファイルが必要です。(VB6.0ランタイムに含まれているのは分かるのですが、Office製品にくっついてくるかは不明…) このOCXに含まれるコントロール「Microsoft Internet Transfer Control 6.0」を使っています。なので、コードをコピーしただけでは動作しません。 1. UserFormの編集で「ツール」→「その他のコントロール」を開く。 2. 「Microsoft Internet Transfer Control 6.0」にチェックを入れる 3. ツールボックスに現れた「Inet」をUserFormに貼り付ける。 「Microsoft Internet Transfer Control 6.0」が見つからなかった場合は、OCX自体がインストールされていません。これはVB6.0ランタイムセットをインストールすることで入手できます。Visual StudioでなくともVectorなどで無料配布されているものがあるので探してみてください。 と、ここまで書いてWebBrowser.NavigateでHTTPヘッダの追加が出来ることを思い出しました…(遅っ ただ、<body>の中身しか取得していませんが。 UserFormにWebBrowserコントロールとCommandButtonコントロールを貼り付けて以下のコードを実行してみてください。 Private Sub CommandButton1_Click() ' User-Agentを「mobile」としてURLにアクセス Call WebBrowser1.Navigate("** ここにURL **", Headers:="User-Agent: mobile" & vbCrLf) End Sub Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) Dim strBodyHtml As String ' <body>タグの中身を取得 strBodyHtml = WebBrowser1.Document.Body.InnerHTML ' TextBox1.Text = strBodyHtml ' テキストボックスに表示するのであれば End Sub

その他の回答 (1)

回答No.1

Microsoft Internet Transfer Control 6.0 を使えばHTTPヘッダを指定してHTMLを取得できます。 Option Explicit Private Sub CommandButton1_Click() ' Internet Transfer Control(Inet1)でUser-Agentを"Mobile"と指定してHTML取得する例 Call Inet1.Execute(" ** ここにURLを記述 ** ", "GET", "", "User-Agent: Mobile") End Sub Private Sub Inet1_StateChanged(ByVal State As Integer) Dim strBuff As String, strRecv As String Select Case State ' データ受信 Case icResponseCompleted strBuff = Inet1.GetChunk(1024, icString) While Len(strBuff) > 0 strRecv = strRecv & strBuff strBuff = Inet1.GetChunk(1024, icString) Wend ' strRecvに取得したHTMLが入る TextBox1.Text = strRecv End Select End Sub

kakashiii
質問者

お礼

回答ありがとうございます。 エクセルのVBEに貼り付けましたが、オブジェクトが必要ですみたいな エラーが出て実行できませんでした。 具体的にこれを実行するには何が必要でしょうか? あくまでもエクセルで実行したいのですが。。。 Visual Stadioを勝ってインストールすれば使えますか?

関連するQ&A

  • EXCELのVBAについて

    エクセルのVBAでユーザーフォームに作ったテキストボックスに入力した値を、コマンドボタンによる「実行」とともに別に作った標準モジュールの変数として代入するにはどうすれば良いでしょうか? 具体的な流れは、 マクロ実行  ↓ ユーザーフォーム出現  ↓ テキストボックスに数字を代入→「実行」  ↓ 変数を代入された標準モジュールによる処理完了 というものです。 ご教授お待ちしております。

  • エクセルのVBAについて

    エクセルのVBAについて教えて下さい。 エクセルのVBAでプログラムを組んでいるのですが、一つわからないことがあるのです。 マクロが実行(オープン)されるファイル名(ファイルパス)をVBAで取得するためにはどうすればいいでしょうか? たとえば、マクロが実行されるファイルがC:\テスト.xlsならば "C:\テスト.xls"を取得したいと考えています。 どなたかご教授お願い致します。 宜しくお願い致します。

  • エクセル2003で作ったVBAが2007で動かない

    現在、エクセル2003で作成したVBAがエクセル2007だと、マクロを有効にして起動させようとするとコンパイルエラーとなって動作しない現象が起きていて困っています。 どなたか、解決方法をご教授頂けないでしょうか? ・VBAを含んだファイルを開いて、マクロを有効にすると ”コンパイルエラー:変数が定義されていません” というエラーボックスが出てきてプログラムの矢印のポイントがPrivate Sub User Form_Initialize() のところを指したまま止まってしまう。 ・このVBAはエクセルの表の書かれたデータをRS-232Cで出力するようなプログラムが使われていて、MSCommというものが使われています。この関連のプログラムが2003と2007では互換がないということはありますでしょうか? どうぞ、よろしくお願い致します。

  • エクセル VBA ' " ! & の使い方

    エクセル VBA ' " ! & の使い方 VBAを独学で勉強している、超初心者です。 同じシート内でのVBAを作るのはなんとなくできるようになったのですが、別のシートのデータを参照したいときなど、(シート名を変数にしています)うまく動作できません。 ' " ! & の使い方をやさしく解説してください。 よろしくお願いします。

  • ExcelのVBAにおけるLastRowという言葉

     ExcelのVBAにおいて、「最終行」即ち「(その列において)データが存在しているセルの中で最も下にあるセルの行番号」を取得する必要が生じる事が良くあります。  その様な場合には、Cells(Rows.Count,列番号).End(xlUp).Row か Range(列番号 & Rows.Count).End(xlUp).Row を用いて取得するのが主流ですが、多くの場合、最終行の行番号のデータが必要になるたびに取得しなおすのではなく、最初に取得した最終行の行番号を変数に格納しておき、最終行の行番号のデータが必要な場合はその変数を使って最終行の行番号を指定するのが普通です。  その様な最終行の値を格納する変数を使用する場合、私個人の場合は「何に使用するための変数であるのかという事を解りやすい変数名を用いる」という観点から、「LastRow」という変数名を好んで用いております。  この「LastRow」という変数名はあくまでそのVBAマクロ内だけで使用されるその場限りのものに過ぎない筈です。  しかし、このサイトのExcelのVBAに関する質問を眺めていると、例えば Range(”○○")からLastRowまで ○○セルからLastRowまで といった具合に、「LastRow」という言葉があたかも「『最終行の行番号』や『最終行のセル』を表す"一般名詞"」であるかの様に使用されている質問を時々見かける事があります。  これが「last row」であれば「最後の行」という意味の英語の言葉になりますから間違いとは言えません。  それに対し「LastRow」という単語は少なくとも英語には存在しません。  それにもかかわらず、「LastRow」という言葉が前述の様な一般名詞として使われているという事は、ExcelのVBAにおいて「LastRow」という言葉は、Excelのワークシートを使った処理における「作業列」などと同様のテクニカルタームになっているという事なのでしょうか?

  • 携帯サイトでのログインについて

    カテゴリ違いの所に投稿してしまったようなので こちらで再投稿させていただきます。 携帯サイトでは、例えばiModeならCHTMLといったようにHTMLのサブセットが使われますが、他の機能も限定されていますよね? CookieやJavaS等も使えないと思うのですが、 ヤフオク含め、ログインしてユーザ情報を取得し、そしてそれを引き継いだまま使える携帯サイトもあります。 これはどういう方法で実現しているのでしょうか? cgiにして、環境変数なり標準入力なりを拾って受け渡しているのでしょうか? どなたかお分かりの方、御回答よろしくお願いします。

    • ベストアンサー
    • CGI
  • ExcelのVBA。public変数の値が消える

    VBAについて。Excelの2003や2007を使っています。標準モジュールで public 変数を定義しました。 ユーザーformを使い、パブリック変数に値を入れたり変更し、標準モジュールに戻ったとき、そのpabulic変数が resetされてしまっている事があります。全く同じマクロで、この現象が起こることと、起こらないことがあります。excelの2003でも2007でも、同じ現象が起こります。簡単なマクロで再現性のある具体的なものを示したいと思い、試しましたが、できませんでした。簡単なマクロでは、きちんとパブリック変数は保持されています。問題のあるマクロはかなり長いものなので、とても示せません。問題がどこにあるのかわかりません。このマクロで不都合があるという具体的なマクロを示すことができない状態での質問で、申し訳ありません。 また、このようなプログラミングをしていて思ったのですが、ユーザーフォームに対してユーザーが任意の引数を渡す方法あるいは、ユーザーフォームから引数を受け取る方法はあるのですか?今は、pubulic変数を用いたり、具体的なセルに値を代入したりしていますが、どう考えてもそれはエレガントではないし、汎用性もないと思います。引数で引き渡すのが一番綺麗でいいとは思うのですが、それが可能かどうかわかりません。

  • エクセルvbaの変数について

    エクセルVBAについて、同じ型の値が複数列あった際に、変数に取り入れる方法として、それぞれ一つずつ別々に変数に入れる場合と、ユーザー定義型変数を定義して入れる場合の二つがあると思いま すが、どちらの方がメモリを使わなくて済むのでしょうか。また、他にも長短があればご教示下さい。

  • VBAのパスの取得について

    excelでマクロをVBAで組み、excelが現在置かれているところのパスを取得したのですが たとえばCのaaというファイルのbbところにおいて実行すると変数aに C:\aa\bb を取得することができました。 このパスの最後に\をつけて C:\aa\bb\ にしたいのですがどの書けば変数aに\を追加できるのでしょうか?

  • エクセルVBA ユーザーフォームをオブジェクトとしてセットする書き方?

    いつもご回答頂きありがとうございます。 エクセルVBAでユーザーフォームをオブジェクト変数として セットする書き方を教えていただけないでしょうか? エクセルVBAでAファイルとBファイルがあり AファイルのVBAからBファイルを開いて、データを取得し Aファイルに記入していく。と言うVBAを作成しました。 ただ、BファイルにはopenイベントでBファイルに作成された ユーザーフォームがloadされるようになっていて、 AファイルからBファイルを開けたとき、そのユーザーフォームを 消したいのですが、消す方法が分かりません。 AファイルからBファイルをopenメソッドを用いたあと、ユーザー フォームを消せばいいと思うのですが、書き方が分からず困って おります。 オブジェクトとしてセットして、そのオブジェクトをunloadすれば いいかな?とか思っているのですが、セットの仕方もわからず、、、 宜しくお願いいたします。 それぞれのファイル名を「ファイルA」、「ファイルB」、 ユーザーフォーム名を「UserFormB」としたとき、どのように 書けばよろしいでしょうか?

専門家に質問してみよう