2016-09-04 8 views
0

非常に長いURLリストがあります。そこから、JSONテキストを循環して解析しています。 URLのリストは、最終的に2つの行に分かれており、URLリストの配列を(長いコードの)1行に短縮することによってのみ修正することができるエラーを受け取るため、以下のように構造化されています(urlArray = Array("URL1", "URL2", "URL3", "URL4", "URL5")。 (注:この元の構造/構文を修正できると思われる場合は、の7つのURLで動作しますのでご連絡ください)配列の構造:非常に長い配列リスト(VBA)

URLの配列を次の形式に変更しました(上記のurlArray = Array("URL1", "URL2", "URL3", "URL4", "URL5"と置き換え、 :

urlArray(1) = "URL1" 
urlArray(2) = "URL2" 
urlArray(3) = "URL3" 
urlArray(4) = "URL4" 
urlArray(5) = "URL5" 

私はこの新しいフォーマットに変更できますか、私は実行時エラーを受け取り '5':

無効なプロシージャ呼び出しまたは引数

ハイライト表示.Open "GET", MyUrls(k)

私の質問は、この新しい構造に変更できますか?または、私の状況(最初の形式では動作しないURLの非常に長いリスト)を考えれば、別の方向に進むべきでしょうか?

全コード変更前:

Option Explicit 

Sub getJSON() 

Dim sheetCount As Integer, urlArray As Variant 
sheetCount = 1 

urlArray = Array("URL1", "URL2", "URL3", "URL4", "URL5", "etc.") 

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) 

     Dim i As Long, p As Object 

     For i = 1 To Json("prices").Count 
      Set p = Json("prices")(i) 
      Sheets("Sheet" & sheetCount).Cells(i, 1) = p("name") 
      Sheets("Sheet" & sheetCount).Cells(i, 2) = p("cost")("fareType") 
      Sheets("Sheet" & sheetCount).Cells(i, 9) = p("cost")("base") 
      Sheets("Sheet" & sheetCount).Cells(i, 10) = p("cost")("perMinute") 
     Next i 

    End With 

    sheetCount = sheetCount + 1 
Next k 

End Sub 
+0

は法的あなたのURLです? (Google) –

+0

@shaiRadoあなたが "合法"とは何を意味するのか分かりませんが、上記の変更前のコードはURLリストが* TOO *になる前に完全に動作しますすなわち、複数の行に及ぶ)。 – Kyle

+0

「URL1」はどのようなものですか?その情報を共有することができれば –

答えて

1

アン_は、あなたが次の行にコードを継続することができますアンダー。

Sub getJSON() 

Dim sheetCount As Integer, urlArray As Variant 
sheetCount = 1 

urlArray = Array("URL1", "URL2", "URL3", "URL4", "URL5", "URL6", "URL7", _ 
      "URL8", "URL9", "URL10", "URL11", "URL12", "URL13", "URL14", _ 
      "URL15", "URL16", "URL17", "URL18", "URL19", "URL20") 

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) 

     Dim i As Long, p As Object 

     For i = 1 To Json("prices").Count 
      Set p = Json("prices")(i) 
      Sheets("Sheet" & sheetCount).Cells(i, 1) = p("name") 
      Sheets("Sheet" & sheetCount).Cells(i, 2) = p("cost")("fareType") 
      Sheets("Sheet" & sheetCount).Cells(i, 9) = p("cost")("base") 
      Sheets("Sheet" & sheetCount).Cells(i, 10) = p("cost")("perMinute") 
     Next i 

    End With 

    sheetCount = sheetCount + 1 
Next k 

End Sub 

あなたはFor Eachループを使用して、あなたの配列を反復処理したい場合があります。

Dim k As Variant 

For k = LBound(MyUrls) To UBound(MyUrls) 

    With MyRequest 
     .Open "GET", k 

私はスプレッドシート上のURLを格納します:

enter image description here

あなたはこのようなあなたの配列にロードすることができます。

enter image description here

Dim MyUrls 
With Worksheets("Sheet1") 
    MyUrls = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)).Value 
End With