VBAを使用してテキストファイルのソースを変数に格納する方法

このQ&Aのポイント
  • VBAを使用してデスクトップにあるテキストファイル(html型)のソースを変数に格納する方法を教えてください。
  • 現在はブラウザを立ち上げてソースを取得していますが、ADOや他のテキスト操作を使用してソースを変数に格納する方法があれば教えてください。
  • ブラウザを立ち上げずにテキストファイルのソースを変数に格納する方法を教えてください。
回答を見る
  • ベストアンサー

テキストのソースを変数に格納したい vba

デスクトップにあるテキストファイル(html型)のソースを変数に格納したいのですが ブラウザを立ち上げないで格納する方法はありますか? 今は、 Sub test() Dim strFName As String strFName = MyDesktop & "\test.html" Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate strFName strBody = objIE.Document.Body.innerHTML End Sub としていますが、ADOやその他テキスト操作を使って ソースを変数に格納する方法があればおしえてください。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

別の質問への回答を作成していて検索している内に、たまたま遭遇しました。 http://okwave.jp/qa/q8648361.html #2さんの回答にも出てきますが、IEを起動せずにDOMが扱えるみたいです。 単純に変数bufに格納するだけなら、下記の様にTextfileとして扱えば良いですし、 少し触ってみただけですが、HTMLDocumentにwriteすれば、DOMで操作できます。 IEは起動しないにしても、似たようなプロセスが走っているのではと、途中でStopしてタスクマネージャーで眺めてみましたが、発見できておりません。 Sub test() Dim doc As Object Dim fso As Object Dim textFile As Object Dim buf As String Set doc = CreateObject("htmlfile") Set fso = CreateObject("Scripting.FileSystemObject") Set textFile = fso.OpenTextFile(GetDesktopPath & "\test.html") buf = textFile.readAll doc.write buf Debug.Print doc.getElementsByTagName("Title")(0).innerText Set doc = Nothing Set fso = Nothing End Sub 'コード中の伏せ字を防ぐためデスクトップに置いて試しています Private Function GetDesktopPath() As String Dim wScriptHost As Object, strInitDir As String Set wScriptHost = CreateObject("Wscript.Shell") GetDesktopPath = wScriptHost.SpecialFolders("Desktop") Set wScriptHost = Nothing End Function

ixfzqyrdte
質問者

お礼

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

その他の回答 (2)

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.2

載せられてるコードから察するにIEを介さないでDOM処理を行いたいのでしょうけど、 CreateObject("htmlfile")でインスタンス化して IPersistFileのLoadメソッドで読みこめばいいのですが、 VBA用のタイプライブラリを作るかどっかから調達してこないといけませんね。

ixfzqyrdte
質問者

お礼

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

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.1

テキストファイルの読み込みですので以下のサイトを参考にしてみてください http://officetanaka.net/excel/vba/file/file08b.htm

ixfzqyrdte
質問者

お礼

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

関連するQ&A

  • vbscriptでhtmlのソース保存

    vbscriptにてIEを操作し、指定URLのhtmlソースコードをファイルに保存するスクリプトを作成しています。 ですが、サイトによっては取得に失敗するケースがあり、原因が分かりません。 下記の例では、yahooのトップページは取得できますが、amazonのトップページは 取得できませんでした。 申し訳ありませんが、原因と解決策を教えていただきたいです。 よろしくお願いいたします。 尚、環境はWinXP(SP3) 、IEはver8を使用しています。 '--------------------------------------------' Option Explicit Dim objIE Dim strBody Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.amazon.com/" 'objIE.Navigate "http://www.yahoo.co.jp/" Do Until objIE.Busy = False WScript.sleep(250) Loop' strBody = objIE.Document.Body.InnerHtml msgbox strBody Dim fso, tf Set fso = CreateObject("Scripting.FileSystemObject") Set tf = fso.CreateTextFile("test.txt", True) tf.Write strBody tf.Close Set objIE = Nothing '--------------------------------------------'

  • 複数のタブを開きたい IE

    IE9を使っています。 画像のようにタブを二つ開くにはどうすればいいでしょうか? Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub だと一つのタブしか開けません。 Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub にしても Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" objIE.Navigate2 "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub にしても1つのタブしか開けないです。 ご回答よろしくお願いします。

  • 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以外を使うのでしょうか?

  • vbaでIEを閉じるだけの処理

    オフィス2003を使用しています。 「IEを開いて閉じる」は Sub TEST() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True '見えるようにする '文字列で指定したURLに飛ぶ ObjIE.navigate "http://www.yahoo.co.jp/index.html" '表示終了まで待つ Do While ObjIE.Busy = True DoEvents Loop ObjIE.Quit End Sub と言うことがわかったのですが 開くのは他の作業をしたときに行うので 「閉じる」だけをvbaで行いたいのですがどうすればいいのかわかりません。 Sub TEST2() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True '見えるようにする ObjIE.Quit End Sub だと また新たなIEが起動してしまい「現在起動しているIEを閉じる」と言うことができません。 アドバイスをお願い致します。

  • VBAでyahooをログアウトしたい

    VBAでyahooにログインすることはできたのですが、 VBAでログアウトしたいです。 Sub yahoo() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" ログアウトするコード ・ ・ ・ End Sub   まではわかりました。自分なりには頑張りました。 IE9を使ってるのですが そもそもソースの見方がわかりません。 ご教授よろしくお願いします。

  • 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の方法でブラウザを開くメリットはあるのでしょうか?

  • VBAでIE操作ができない エラーになる

    vista+オフィス2007です。 エクセルで --------------------------------------------------------- Sub ie_test() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.google.co.jp/" End Sub --------------------------------------------------------- を実行したいのですができません。 Set objIE = CreateObject("InternetExplorer.Application") の部分で、しばらく固まり、その後 「実行時エラー'-2147467259(80004005)': オートメーションエラーです。 エラーを特定できません」 と表示されてしまいます。 前にvista+オフィス2003の時は 上記のコードで問題なく動作しました。 2007でも動く方法を教えてください。ご回答よろしくお願いします。

  • 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 で オートメーションエラー 起動されたオブジェクトはクライアントから切断されました。 となります。 なぜローカルだと、エラーになるのでしょうか? 何が違うのでしょうか?

  • サイトのソースのsubmitボタンの数を取得したい

    サイトのソースのsubmitボタンの数を取得したいのですが Sub test() Dim objIE As InternetExplorer Dim MyRow As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.coneco.net/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Document.all.tags("input").Type("submit").Count Set objIE = Nothing End Sub だとうまく動きません。 どう、変更すればよろしいですか?

  • 二つ目のタブを閉じたい

    http://hiroba.chintai.net/qa7823804.html こちらでも質問したものです。 xls88さまに教えていただいて、 Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "http://www.yahoo.co.jp/" objIE.Navigate2 "http://www.goo.ne.jp/", 2048 objIE.Navigate2 "http://www.google.co.jp/", 2048 objIE.Quit Set objIE = Nothing End Sub で、複数のタブを開くことができたのですが、 http://www.goo.ne.jp/のタブだけを閉じたい場合はどうすればいいでしょうか? 上記のコードを実行すると、http://www.yahoo.co.jp/が閉じてしまいます。 ご回答よろしくお願いします。

専門家に質問してみよう