2016-04-26 13 views
1

私は広範囲に検索して、探しているものが見つかりませんでした。私のVBAに関する知識はこれまで数を操作することに限定されていたので、これは私の新しい分野です。URL [Excel VBA]からデータを取得しています

私は、次のURLから1行のデータを取得しようとしていますLINK

Enum READYSTATE 
    READYSTATE_UNINITIALIZED = 0 
    READYSTATE_LOADING = 1 
    READYSTATE_LOADED = 2 
    READYSTATE_INTERACTIVE = 3 
    READYSTATE_COMPLETE = 4 
End Enum 

Sub ImportStackOverflowData() 

    Dim ie As InternetExplorer 

    Dim html As HTMLDocument 

    Set ie = New InternetExplorer 

    ie.Visible = False 
    ie.navigate "http://api.rsbuddy.com/grandExchange?a=guidePrice&i=1637" 

    Do While ie.READYSTATE <> READYSTATE_COMPLETE 
     DoEvents 
    Loop 

    'show text of HTML document returned 
    Set html = ie.document.body 
    MsgBox html.DocumentElement.innerHTML 

    'close down IE and reset status bar 
    Set ie = Nothing 
    Application.StatusBar = "" 

End Sub 

、URLに移動した後:それが終わると、私はそのデータを解析する上で動作することができますが、我々はその橋を渡るよ...ここ

は、これまでのエクセルVBAのコードがありますIEのダウンロードウィンドウが開き、.jsonファイルを開くか保存するかを尋ねます。何かをクリックするとコードがクラッシュし、無視すると、その下のREADYSTATEループにコードが残されます。

このウィンドウを開けないようにするにはどうしたらいいですか?その情報をブックに挿入するにはどうすればよいですか?

ありがとうございます。

+0

私の理解から(おそらく間違っている)、サーバーから送信されたヘッダーのため、サイトのコンテンツがダウンロードとして配信されています。これはあなたがコントロールできないものです。手動でサイトに移動しても、ダウンロードプロンプトが表示されますか?ちょっとしたことに、IE Object Libraryにリファレンスが設定されているのを見ると、モジュールの上部に 'ReadyState'列挙型を作成する必要はありません。 –

+0

ありがとう、それは私が従っていたガイドの一部だった。それを削除します。 また、この問題はIEが.jsonをネイティブで表示できないためですか?別のブラウザに切り替える必要がありますか? – User9123

+0

こんにちは、私はあなたの編集と同時にコメントしました。 chromeまたはfirefoxでURLを開くと、1行のテキストが表示されます。 IEで開いてファイルを保存しようとしました... – User9123

答えて

1

あなたが検索した場合、そのボックスの周りを巡ることは自明ではありません。 IEのいくつかのバージョンが(ダイアログボックスではなくダウンロードリボンで)異なる方法で動作するので、特に複雑になります。

これを行うには、Windows APIを使用してダウンロードウィンドウのハンドルを取得し、それを却下する必要があります。これは非常に迅速に非常に複雑になります。

ただし、はるかに簡単な方法があります。単純な要求に対してInternet Explorerを使用しないでください。より軽いものを使用してください。ここではMSXMLを使用しましたが、WINHTTPと交換することができます。

Sub ImportStackOverflowData() 

    Dim request As Object 
    Set request = CreateObject("MSXML2.XMLHTTP") 

    With request 
     .Open "GET", "http://api.rsbuddy.com/grandExchange?a=guidePrice&i=1637", False 
     .send 
     MsgBox .responseText 
    End With 

End Sub 
+0

簡単な解答と説明です。 +1 –

+0

カイルの反応をありがとう、それは多くの意味があります。 メソッドを試したところ、 ".send"がハングアップし、最終的にランタイムエラー "-2147012894"が返されました。 リファレンスがありません。 – User9123

+0

@ User9123、いいえ、WinHTTPはあなたの特定のネットワーク設定に応じていくつかの手品をする必要があります。修正されたコード – SWa

関連する問題