2016-08-30 4 views
0

ループ関数/構文を探していますが、JSON配列を引き出しているウェブサイトを終了するとループは終了します(可変/配列の)。ウェブサイトが解析されるまで追加のJSON配列がありません

洞察をいただきありがとうございます。

sheetCount = 1 
i = 1 
urlArray = Array("URL array list") 

Dim MyRequest As Object 
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 

Dim MyUrls 
MyUrls = urlArray 

Dim k As Long 
Dim Json As Object 

For k = LBound(MyUrls) To UBound(MyUrls) 
    With MyRequest 
     .Open "GET", MyUrls(k) 
     .Send 
     Set Json = JsonConverter.ParseJson(.ResponseText) 
     Do Until ''[NEED HELP HERE] 
      Sheets("Sheet" & sheetCount).Cells(i, 1) = Json("cars")(i)("carType") 
      Sheets("Sheet" & sheetCount).Cells(i, 2) = Json("cars")(i)("fare")("carprice") 
      i = i + 1 
     Loop 
    End With 
    sheetCount = sheetCount + 1 
Next 
+0

を設定し、JSON = ... ' –

+0

@CodyG'からの出力例を提供します。上記のSet Jsonコードを更新しました。出力は、(セル上のJSONから)指定されたセル(たとえば、最初のテキスト文字列のSheet1上のCell 1,2)に解析されたテキスト文字列です。 – Kyle

答えて

1

UBound functionがありません。

その他注意事項

  • 無記号Option Explicitせず、期間。例外なく。
  • 1つのことを行う小さな機能を作成します。
  • CreateObjectの代わりに使用するライブラリへの参照を追加します。コンパイル時の型チェックとIntellisenseが得られるので、あなたの人生はずっと楽になります。
  • Exists() methodを使用して、アクセスしようとする前に辞書キーが存在するかどうかを確認する方が安全です。存在しないキーにアクセスしようとすると、ランタイムエラーが発生します。
  • 私は黙ってあなたがhttps://github.com/VBA-tools/VBA-JSONを使用していると仮定しています。

これは十分に近いようになります。

Option Explicit 

Function GetJson(ByVal url As String) As Dictionary 
    With New WinHttpRequest ' see http://stackoverflow.com/a/3119794/18771 
     .Open "GET", url 
     .Send 
     Set GetJson = JsonConverter.ParseJson(.ResponseText) 
    End With 
End Function 

Sub FillCarInfo(data As Dictionary, sheet As Worksheet) 
    Dim i As Integer, car As Dictionary 
    For i = 0 To UBound(data("cars")) - 1 
     Set car = data("cars")(i) 
     ' you probably should use If car.Exists("carType") Then 
     sheet.Cells(i, 1) = car("carType") 
     sheet.Cells(i, 1) = car("fare")("carprice") 
    Next i 
End Sub 

Sub FillMultipleCarInfo(urls As Variant, book As Workbook) 
    Dim i As Integer, data As Dictionary, sheet As Worksheet 

    For i = 0 To UBound(urls) - 1 
     Set data = GetJson(urls(i)) 
     Set sheet = book.Sheets(i + 1) 
     FillCarInfo data, sheet 
    Next i 
End Sub 

使用

Dim myUrls As Variant 
myUrls = Array("URL array list") 

FillMultipleCarInfo myUrls, ActiveWorkbook 
+0

@tomalakに感謝します。私は近いと思いますが、Sub FillMultipleCarInfo(URLとしてバリアント、ブックとしてブック)と 'Set data = GetJson(urls(i))'のURLを強調表示するByRefの引数タイプの不一致があります。 – Kyle

+0

@カイル私は自宅にMSオフィスを持っていないので、私はそれをテストすることができませんでした。今私の仕事のPCで、もう一度やり直してください。 ([編集#4参照](http://stackoverflow.com/posts/39241900/revisions#rev-arrow-0efa021c-1c7a-4cec-b732-59f4a509f151)) – Tomalak

+0

ありがとう、更新されました。私がまだ従わない/私が間違って実装していると信じている唯一の事は、上記の "使用"の部分です。私は "ThisWorkbook"(つまり、モジュールではない)に設定されたコード全体を持っています。この "使用"コードを特定の場所に置く必要がありますか?さらに、私は複数の関数に細分されたプログラムを実行したことがないので、各関数を呼び出す "実行"サブを設定する必要がありますか?その後、私は設定する必要があります。再度、感謝します。 – Kyle

関連する問題