Добрый день. Есть макрос, который берет таблицу Access в массив, но проблема в том, что массив горизонтальный выходит. То есть, вместо 6 столбцов получается 6 строк. Функция Transpose не работает, выдает ошибку Out of memory. Как вставить данные в массив вертикально?
Код
Sub Access()
Dim s As String, fldr As String
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim strMessage As String
Dim b As Variant
Set dbsNorthwind = OpenDatabase("C:\OP.accdb")
Set rstEmployees = dbsNorthwind.OpenRecordset("SELECT * FROM q_promoexcel")
b = rstEmployees.GetRows(rstEmployees.RecordCount)
b = TransposeArray(b)
End sub
_______________________________________________________________________________________
Function TransposeArray(ByVal arr As Variant) As Variant
Dim tempArray As Variant
ReDim tempArray(LBound(arr, 2) To UBound(arr, 2), LBound(arr, 1) To UBound(arr, 1))
For x = LBound(arr, 2) To UBound(arr, 2)
For y = LBound(arr, 1) To UBound(arr, 1)
tempArray(x, y) = arr(y, x)
Next y
Next x
TransposeArray = tempArray
End Function
БМВ, эта строка вызывает функцию ниже. после добавления в массив таблицы Access данные в массиве перевернулись горизонтально, как на скриншоте, то есть вместо 6 столбцов у меня образовалось 6 строк. Функцией я пытался вернуть их назад, но во время выполнения вылетает ошибка out of memory.
Hellmaster, объявите b и bb массивами и укажите размерность:
Код
Dim b(), bb()
ReDim b(1 To rstEmployees.RecordCount, 1 To rstEmployees.Fields.Count)
ReDim bb(1 To rstEmployees.Fields.Count, 1 To rstEmployees.RecordCount)
b = rstEmployees.GetRows
bb = TransposeArray(b)
Кстати, выгружать на лист в транспонированном виде еще можно так:
БМВ, мне в таблице аксеса провести расчеты и вернуть таблицу с расчетами обратно в аксес в другую таблицу. возвращается она транспонированная) Ungrateful, на лист я не могу вывести таблицу. у экселя нет столько строк) с двумя массивами попробую поработать. пока что он транспонирует только первые 6 столбцов в 6 строк. Спасибо
здравствуйте! Попробуйте её усовершенствованную версию - тут показал
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Hellmaster написал: вернуть таблицу с расчетами обратно в аксес
С точки зрения же обработки нет никакой разницы как расположены данные записи таблицы по первому индексу массива строки, а по второму - данные строк или по первому индексу данные строки, а по второму - строки, по большому счёт дело привычки. А вот как вернуть данные в таблицу Access на более чем 1000000 строк - та ещё задача по быстродействию