Страницы: 1
RSS
Variant как источник данных сводной таблицы
 
Подскажите, можно ли в качестве источника данных сводной таблицы использовать тип данных Variant?

Что я хочу сделать:
1. Получить данные из базы данных
2. Преобразовать набор данных в Variant (чтобы можно было изменить данные)
3. Изменить данные
4. Измененный набор указать в качестве источника данных в сводной таблице
Код
Private Sub CommandButton1_Click()
    

Dim CN   As ADODB.Connection
Dim rst  As ADODB.Recordset
Dim vDat As Variant

Set CN = CreateObject("ADODB.Connection")
CN.ConnectionString = "Driver={Oracle in OraClient11g_home1};Dbq=DBNAME;Uid=User;Pwd=Pass;"

CN.Open

sqlStr1 = "select * from mytable where id < 20 "

Set rst = CN.Execute(sqlStr1)
vDat = rst.GetRows

CN.Close

vDat(1, 4) = "12345"


Set ActiveSheet.PivotTables(1).PivotCache.Recordset = vDat 'Тут я застрял
ActiveSheet.PivotTables(1).PivotCache.Refresh

End Sub
 
После выполнения строки 16 в Вашем макросе переменная vDat является двумерным массивом. Свойству Recordset в строке 23 должна быть присвоена ссылка на объект типа Recordset.
Владимир
 
Цитата
sokol92 написал:
Свойству Recordset в строке 23 должна быть присвоена ссылка на объект типа Recordset.
sokol92 спасибо за ответ, но это и так понятно. Я не очень разбираюсь в VBA и хотел узнать, есть ли какая-нибудь возможность указать двумерный массив в качестве источника данных в сводной таблице, например преобразовать двумерный массив в Recordset или еще каким-нибудь другим способом.
 
Доброе время суток
Цитата
idShura написал:
преобразовать двумерный массив в Recordset
Как бы уже было, достаточно было воспользоваться поиском, например, Сводная таблица на основе двумерного массив и чётко ставить вопрос в своей теме :)
Изменено: Андрей VG - 21.06.2020 12:45:12
 
Для решения исходной задачи есть несколько возможностей. По-первых, ADO.Recordset является редактируемым объектом. Его можно изменить, а затем "подсунуть"  PivotCache (в этом случае двумерный массив не нужен). Можно "по-старинке" полученный с помощью RetRows двумерный массив занести на вспомогательный лист и на основе этого диапазона построить сводную таблицу. Несмотря на "неэстетичность" этого решения, у него есть и преимущества - можно, например, добавлять новые вычисляемые столбцы без оглядки на ограничения для полей сводных таблиц. Ну и, наконец, можно изменить SQL-запрос и сразу получать из Oracle данные в нужном виде (наилучший, с моей точки зрения, вариант).
Изменено: sokol92 - 21.06.2020 13:49:57
Владимир
Страницы: 1
Наверх