【问题标题】:VBA Print Array to SheetVBA 将数组打印到图纸
【发布时间】:2020-01-14 22:48:29
【问题描述】:

我知道有很多类似的问题,但我看到的问题都没有解决我的问题。 我对 VBA 完全陌生,我不明白它的数据结构是如何工作的。

我从 Web API 获取 JSON 字符串,并尝试将特定字段打印到电子表格中。 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 正确打印到工作表上?

编辑:仔细检查后,我的循环似乎很奇怪,因为它不会增加i(我从 somwhere 复制了这个语法)。这是正确的吗?

【问题讨论】:

  • i = i + 1 在循环内...我想Parsed("responses").Count > 1.
  • 你已经初始化了一个水平数组(每个定义)。您必须转置数组以填充垂直范围 > Application.Transpose(Responses)。如果您不转置数组,它将使用数组中的第一个元素填充所有单元格。
  • 我之前尝试过 i = i + 1 和 Application.Transpose 但不是同时使用。它现在可以同时使用。
  • 如果回答满意,可以标记为接受吗?

标签: excel vba


【解决方案1】:

您可以试试这段代码,看看如何手动将数组转置为临时数组,并作为函数输出。

    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

【讨论】:

  • 为什么要构建自己的Application.Transpose 函数?出于好奇 =)
  • @JvdV Application.Transpose 的上限约为 62,000。这允许任何大小的数组的转置。
  • 嗨 JvdV。多年来,有些情况下我需要在转置期间从数组中取出特定的东西。其中一个问题涉及在打印页面之前需要从数组中删除的 unicode 占位符字符。 Id 将数组转置为 2 个不同的临时数组,然后在合并之前对其中的一个运行 unicode 删除。这是为了将我的单线程大脑包裹在多线程问题 XD 中......对于 ADODB 转置来说是的......就像斯科特说的 ^ 限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多