VBA Print Array to Sheet - PullRequest
       0

VBA Print Array to Sheet

0 голосов
/ 14 января 2020

Я понимаю, что есть много похожих вопросов, но ни один из тех, на которые я смотрел, не решил мою проблему. Я совершенно новичок в VBA и не понимаю, как работают его структуры данных.

Я получаю строку JSON из веб-API и пытаюсь напечатать указанный c поле в электронную таблицу. JSON имеет следующий формат:

{
   "responses":[
      {
         "responseId":"someId",
         "values":{
            ...,
            "QID2":1
         }
      },
      {
         "responseId":"someOtherId",
         "values":{
            ...,
            "QID2":2
         }
      },
      ...
   ]
}

Интересующие меня поля - это QID2, которые всегда имеют значение в диапазоне [1,3]. Вот мой код для разбора и печати этого JSON:

 'Load response into sheet
    Dim Parsed As Dictionary: Set Parsed = JsonConverter.ParseJson(oHttp.responseText)
    Dim Responses As Variant
    ReDim Responses(Parsed("responses").Count)

    Dim Response As Dictionary
    Dim i As Long
    i = 0
    For Each Response In Parsed("responses")
        Responses(i) = Response("values")("QID2")
    Next Response

    Sheets("Sheet1").Range(Cells(1, 1), Cells(Parsed("responses").Count, 1)) = Responses

Я проверил с помощью Debug.Print, что Responses содержит различные значения (комбинация из 1, 2 и 3). Но вывод этого кода печатает только столбец 1 на листе. Как правильно распечатать массив Responses на листе?

РЕДАКТИРОВАТЬ: При ближайшем рассмотрении мой l oop кажется странным в том, что он не увеличивается i (я скопировал этот синтаксис откуда-то ). Это правильно?

1 Ответ

1 голос
/ 14 января 2020

Вы можете попробовать этот код, чтобы увидеть, как вручную преобразовать массив во временный массив и вывести как функцию.

    Function TransposeDim(v As Variant) As Variant
    ' Custom Function to Transpose a 0-based array (v)

    Dim x As Long, y As Long, Xupper As Long, Yupper As Long
    Dim tempArray As Variant

    Xupper = UBound(v, 2)
    Yupper = UBound(v, 1)

    ReDim tempArray(Xupper, Yupper)
    For x = 0 To Xupper
        For y = 0 To Yupper
            tempArray(x, y) = v(y, x)
        Next y
    Next x

    TransposeDim = tempArray

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...