передача многомерного массива в переменную набора записей в VBA - PullRequest
0 голосов
/ 15 марта 2020

У меня есть массив, который я хотел бы использовать в качестве источника данных для построения сводной таблицы. Я понимаю, что сводная таблица не будет принимать массив, и что я должен использовать набор записей, так как это будет принимать сводная таблица.

Я пытаюсь создать набор записей, используя мой массив.

как передать многомерный массив в набор записей?

или

как использовать данные массива в сводной таблице?

Спасибо за любая помощь.

1 Ответ

0 голосов
/ 16 марта 2020

Вы ищете термин «отключенный набор записей». Есть множество примеров, когда вы знаете слова для Google. Например: https://developer.rhino3d.com/guides/rhinoscript/disconnected-recordset-sorting/

Вот базовый пример c:

Sub PopCache()

    Dim pc As PivotCache, rs As ADODB.Recordset, pt As PivotTable
    Dim arr, x As Long

    Set pc = ThisWorkbook.PivotCaches.Create(xlExternal)

    'get an array for testing
    arr = ActiveSheet.Range("J4").CurrentRegion.Value 

    'populate the pivotcache from a recordset
    Set pc.Recordset = ArrayToRecordSet(arr, _
                                        Array("Name", "Color", "Length"))

    Set pt = pc.CreatePivotTable(ActiveSheet.Range("B2"))

End Sub

'Take an array of data and an array of field names and
'  return a populated disconnected recordset
Function ArrayToRecordSet(arr, fieldNames) As Object
    Dim rs As Object, r As Long, c As Long, h, f As Long

    Set rs = CreateObject("ADODB.Recordset")
    For Each h In fieldNames
        rs.Fields.Append h, adVariant
    Next h
    rs.Open
    For r = LBound(arr, 1) To UBound(arr, 1)
        rs.AddNew
        f = 0
        For c = LBound(arr, 2) To UBound(arr, 2)
            rs.Fields(f).Value = arr(r, c)
            f = f + 1
        Next c
    Next r
    Set ArrayToRecordSet = rs
End Function
...