2016-03-20 4 views
1

テーブル内にあるWebサイトからデータをダウンロードしようとしています。さまざまなリンクに沿ってVBAでWebサイトを解析する

実際のダウンロードは、ページへの直接リンクがわかっている限り、正常に動作します。 1つのページにはさまざまなサブページのデータがありますが、最初にリンクをロードして1ページの各リンクに従います。

問題があるのは、サブページを読み込むと、最初のリンクは失われます。オブジェクト変数を保存するにはどうすればよいですか?

私のコードは、これまでのようになります。

 ... 
    more code here 
    ... 

    ieApp.Navigate "http://www.website.com/blabla" 
    Do While ieApp.Busy: Sleep 500: DoEvents: Loop 
    Do Until ieApp.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

    Set rcl = ieApp.Document.getElementsbyClassName("col-md-3") 

    For Each ahref In rcl(0).getElementsByTagName("a") 
     ieApp.Navigate ahref.href 
     Do While ieApp.Busy: Sleep 500: DoEvents: Loop 
     Do Until ieApp.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

     ' Now get the data 

     Call subSaveRecords 

    Next 

    ... 
    continue more 
    ... 

私はieApp新しいページを持っているとして、RCL-オブジェクト/ AHREFオブジェクトが失われたそれぞれのために内ieApp.navigateを開始し、基本的に後。新しいページに移動しながらオブジェクトの値を "保持"するにはどうすればよいですか?

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

答えて

1

サブリンクを開くための新しいオブジェクトを作成して、そのオブジェクトをサブルーチンに渡してデータを取得することはできません。

set ie2 = CreateObject(internetexplorer.application) 
ieApp.Navigate "http://www.website.com/blabla" 
Do While ieApp.Busy: Sleep 500: DoEvents: Loop 
Do Until ieApp.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

Set rcl = ieApp.Document.getElementsbyClassName("col-md-3") 

For Each ahref In rcl(0).getElementsByTagName("a") 
    ie2.Navigate ahref.href 
    Do While ie2.Busy: Sleep 500: DoEvents: Loop 
    Do Until ie2.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

    'Now get the data 

    Call subSaveRecords ie2 
Next 

また、ページを変更する前に、コレクションまたは配列にリンクを追加することもできます。

ieApp.Navigate "http://www.website.com/blabla" 
Do While ieApp.Busy: Sleep 500: DoEvents: Loop 
Do Until ieApp.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

Set rcl = ieApp.Document.getElementsbyClassName("col-md-3") 
For Each ahref in rcl(0).getElementsByTagName("a") 
    linkCollection.add ahref.href 
Next ahref 

For Each ahref In linkCollection 
    ieApp.Navigate ahref 
    Do While ieApp.Busy: Sleep 500: DoEvents: Loop 
    Do Until ieApp.readyState = READYSTATE_COMPLETE: DoEvents: Loop 

    'Now get the data 

    Call subSaveRecords 
Next 
+0

大変感謝しています。私は二番目のオプションのために行った、サイトは私がログインする必要があり、私は2つのブラウザを開くように感じるよりエレガントではない感じています。素晴らしい助け! – Matth